如何在C ++中初始化一个向量

可能重复:
C ++:用硬编码元素初始化STL向量的最简单的方法

我想初始化一个向量,就像我们在数组中的情况一样。

int vv[2] = {12, 43};

但是当我这样做时,

vector<int> v(2) = {34, 23};

要么

vector<int> v(2);
v = {0, 9};

它给出了一个错误:

期望在'{'令牌之前的主表达式

错误:预期','或';' '='令牌之前

分别。


使用新的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);

或者,对于分配给现有矢量的情况:

int vv[2] = { 12,43 };
v.assign(&vv[0], &vv[0]+2);

正如James Kanze所建议的那样,使用函数可以使数组的起点和终点更加健壮:

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;
链接地址: http://www.djcxy.com/p/59497.html

上一篇: How to initialize a vector in C++

下一篇: How to get the current time in YYYY