[英]C++ initialization of vector
任何人都可以向我解釋為什么我們可以這樣初始化矢量? int a[]={1,2,3,4,5}; std::vector<int> vec(a,a+sizeof(a)/sizeof(int));
a[]={1,2,3,4,5}; std::vector<int> vec(a,a+sizeof(a)/sizeof(int));
我也知道這種方式std::vector<int> vec(5,0);
意思是vec有五個元素,它們都被初始化為0.但這兩種方式並不相關。 如何解釋第一個。 如果我們知道值,那么初始化向量的最佳方式(大多數人使用的)是什么。
類std :: vector具有接受一對輸入迭代器的構造函數
template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());
而這個宣言
std::vector<int> vec(a,a+sizeof(a)/sizeof(int));
包括對構造函數的調用,其中a
和a + sizeof(a)/sizeof(int)
是兩個隨機訪問迭代器,因為指針具有這樣的迭代器類別。
這里a
和a + sizeof(a)/sizeof(int)
是兩個指針,它們指定從std::vector<int>
類型的已創建對象的數組中獲取的初始值設定范圍。
考慮到您也可以使用接受初始化列表的構造函數。 例如
std::vector<int> v { 1, 2, 3, 4, 5 };
從C ++ 2011開始支持此構造函數。
你也可以使用:
int a[5]={1,2,3,4,5};
std::vector<int> vec;
for(int i=0; i<5: i++) vec.push_back(a[i]);
std::vector<int> a = {1,2,3,4,5};
適用於C ++ 11。
請參閱: http : //en.cppreference.com/w/cpp/language/list_initialization
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.