小编典典

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

all

我想像在数组的情况下一样初始化一个向量。

例子

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

但是当我这样做时,

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

或者

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

它给出了一个错误:

“榹”标记之前的预期主表达式

错误:预期的“,”或“;”在“=”标记之前

分别。


阅读 92

收藏
2022-06-22

共1个答案

小编典典

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