如何在C ++中初始化一个向量
可能重复:
C ++:用硬编码元素初始化STL向量的最简单的方法
我想像在数组的情况下一样初始化vector。
例
int vv[2] = {12, 43}; 但是当我这样做的时候,
 vector<int> v(2) = {34, 23}; 
要么
 vector<int> v(2); v = {0, 9}; 
它给出了一个错误:
期望在“{”令牌之前的主expression式
和
错误:预期','或';' 在'='标记之前
分别。
使用新的C ++标准(可能需要在您的编译器上启用特殊的标志),您可以简单地执行:
 std::vector<int> v { 34,23 }; // or // std::vector<int> v = { 34,23 }; 
甚至:
 std::vector<int> v(2); v = { 34,23 }; 
在不支持这个特性的编译器(初始化器列表)上,你可以用一个数组来模拟它:
 int vv[2] = { 12,43 }; std::vector<int> v(&vv[0], &vv[0]+2); 
或者,对于分配给现有vector的情况:
 int vv[2] = { 12,43 }; v.assign(&vv[0], &vv[0]+2); 
就像James Kanze所build议的那样,具有给你一个数组的开始和结束的函数更健壮:
 template <typename T, size_t N> T* begin(T(&arr)[N]) { return &arr[0]; } template <typename T, size_t N> T* end(T(&arr)[N]) { return &arr[0]+N; } 
然后你可以做到这一点,而不必重复的大小:
 int vv[] = { 12,43 }; std::vector<int> v(begin(vv), end(vv)); 
你也可以这样做:
 template <typename T> class make_vector { public: typedef make_vector<T> my_type; my_type& operator<< (const T& val) { data_.push_back(val); return *this; } operator std::vector<T>() const { return data_; } private: std::vector<T> data_; }; 
像这样使用它:
 std::vector<int> v = make_vector<int>() << 1 << 2 << 3;