初始化C ++向量的“最佳”方法是什么?

时间:2014-01-03 05:19:17

标签: c++ arrays vector

我的问题是这里的C ++纯粹主义者。我知道Bjarne Stroustrop希望我们养成使用C ++向量的习惯:http://www.youtube.com/watch?v=YQs6IC-vgmo

对于C风格的数组,您可以:

int arr[] = {69, 2, 3};

初始化C ++向量的等效方法是什么?也就是说,当您在C ++中编程并需要一个动态的随机访问容器并且您已经知道其中需要包含的一些元素时,初始化该sucker的最佳方法是什么?

显然你可以做到

int myints[] = {16,2,77,29};
std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) )

但那不是很优雅......

2 个答案:

答案 0 :(得分:5)

C ++ 11语法:

vector<int> arr = {69, 2, 3};

就是这样。

花括号初始值设定项生成std::initializer_list<int>,然后传递给std::vector构造函数。

答案 1 :(得分:2)

如果你正在使用C ++ 03,那么使用vector的迭代构造函数(正如你所做的那样);也许你可以通过将数组长度移动到标题(宏)来使它“看起来”更优雅。

// in some header
template <typename T, size_t N>
const char (&arr_len(const T (&arr) [N]))[N];
#define ARRAY_LEN(arr) sizeof(arr_len(arr))

// in your source
int arr[] = { 1, 2, 3, 4 };
std::vector v(arr, arr + ARRAY_LEN(arr));

如果它是我在评论中发布的C ++ 11,请使用vector的初始化列表构建器。

std::vector v{ 1, 2, 3, 4};

然而,效率方面,我不明白为什么一个会比另一个好。