2015-12-17 166 views
2

我正在與我面臨以下片段代碼C++矢量工作:向量初始化

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    using MyVector = vector<int>; 

    MyVector vectorA(1); 
    cout << vectorA.size() << " " << vectorA[0] << endl; 

    MyVector vectorB(1, 10); 
    cout << vectorB.size() << " " << vectorB[0] << endl; 

    MyVector vectorC{ 1, 10 , 100, 1000 }; 
    cout << vectorC.size() << " " << vectorC[3] << endl; 
    return 0; 
} 

爲什麼在使用關鍵字定義此代碼矢量對象?我無法理解爲什麼在這個代碼中使用這種方法的矢量。

+0

幾乎是[在C++ 11中'typedef'和'using'之間的區別是什麼?](http://stackoverflow.com/questions/10747810/what-is-the-difference-between- typedef-and-in-in-c11),但首先你需要知道typedef是什麼。希望鏈接可以幫助你。 – user4581301

+0

至於爲什麼,作者不想一直反覆輸入'vector ',似乎更願意輸入三個較少的字符和縫製混亂。 – user4581301

+0

哦謝謝user4581301。我明白爲什麼使用此代碼中使用的關鍵字。 – Adonaim

回答

2

特別是當它們變得很長時,連續輸出模板參數會很煩人。 using語法便於保持短小且一致,無需每次輸入vector<...>

0

C++關鍵字:using指令類成員的命名空間和使用-聲明命名空間的成員

  • 使用-聲明
  • 類型別名使用

    用法

    • 和別名模板聲明(自C++ 11以來)

    在您的樣品

    using MyVector = vector<int>; 
    

    是相同的:

    typedef vector<int> MyVector; 
    
  • 1

    在這種情況下,using A = B;,使用允許在更可控的方式不是替代數據類型名稱,一種數據類型名稱乙一個宏定義和類似的,如果不相同的話,一個typedef

    意圖是用一個更容易傳達和使用的術語來取代一些神祕的魔法。在這裏,你通常希望提高清晰度和簡潔性中的一個或兩個。您正在嘗試使某些內容更易於閱讀,並且更易於輸入。

    using MyVector = vector<int>;的例子幾乎沒有意義。 vector<int>簡短明瞭。你知道vector<int>究竟是什麼,所以沒有獲得明確的好處。

    簡潔是有問題的。整個三個字符被保存。隨着時間的推移,這會加起來,但我不確定它會匹配其他人查找什麼是MyVector所浪費的時間。幸運的是,現代的IDE對你很好,所以你不會浪費時間和頭髮尋找MyVector.h

    但是對於像using CubeDataIterator = std::list<core::utils::DataRecord<UEI::Cube>>::iterator這樣的東西,對眼睛是仁慈的。它是一個Cube數據的迭代器,不管它是什麼。但是如果你已經知道立方體是什麼,你就在搖擺。