How to initialize a vector in C++
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
C++: Easiest way to initialize an STL vector with hardcoded elements
我想初始化一个向量,就像在数组的情况下一样。
例子
1 | int vv[2] = {12, 43}; |
但当我这样做的时候,
1 | vector<int> v(2) = {34, 23}; |
或
1 2 | vector<int> v(2); v = {0, 9}; |
它给出一个错误:
expected primary-expression before ‘{’ token
和
error: expected ‘,’ or ‘;’ before ‘=’ token
分别。
使用新的C++标准(可能需要在编译器上启用特殊标志),您可以简单地做:
1 2 3 | std::vector<int> v { 34,23 }; // or // std::vector<int> v = { 34,23 }; |
甚至:
1 2 | std::vector<int> v(2); v = { 34,23 }; |
在不支持此功能(初始值设定项列表)的编译器上,您可以使用数组模拟此功能:
1 2 | int vv[2] = { 12,43 }; std::vector<int> v(&vv[0], &vv[0]+2); |
或者,对于分配给现有向量的情况:
1 2 | int vv[2] = { 12,43 }; v.assign(&vv[0], &vv[0]+2); |
正如JamesKanze所建议的那样,拥有能够为您提供数组开头和结尾的函数更为强大:
1 2 3 4 | 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; } |
然后你可以这样做而不必重复整个尺寸:
1 2 | int vv[] = { 12,43 }; std::vector<int> v(begin(vv), end(vv)); |
您也可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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_; }; |
像这样使用:
1 | std::vector<int> v = make_vector<int>() << 1 << 2 << 3; |