关于数组:如何在C ++中初始化向量

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;