2

我正在使用向量,我正在像这样初始化它们:

vector<int> values;

values.push_back(1);
values.push_back(2);
values.push_back(8);
values.push_back(12);
values.push_back(32);
values.push_back(43);
values.push_back(23);
values.push_back(234);
values.push_back(7);
values.push_back(1);

有没有办法以类似数组的方式 push_back 这些元素?像这样:

    int numbers[2] = {1, 2};

矢量方法占用了太多行,IMO!

4

3 回答 3

9

在 C++11 中,您可以对任何容器使用大括号初始化。

std::vector <int> v = {1, 2, 8, 12, 32 ...};

在 C++03 中你可以这样做

const int arr[] = {1, 2, 8, 12, 32 ... };
const int size = sizeof arr / sizeof arr[0];
std::vector<int> v(arr, arr + size);

或使用boost assign

#include <boost/assign.hpp>
using namespace boost::assign;
///...
{
    std::vector<int> v;
    v += 1, 2, 8, 12, 32;
}
于 2012-11-07T20:14:05.420 回答
4

确实有一种方法可以做到这一点,只要你有一个 C++11 编译器:

std::vector<int> values = {1, 2, 3, 4, 5};

这被称为初始化列表。std::vector有一个构造函数,它接受一个初始化列表(见声明 7)来初始化它的元素。

于 2012-11-07T20:13:18.630 回答
3

在 C++11 中,您可以像处理数组一样执行此操作。std::vector有一个带有 a 的构造函数std::initializer_list<T>,它允许它从列表中初始化自己。

在 C++03 中,您可以使用临时数组:

int tempValues[] = {1,2,8,12,32,43,23,234,7,1};
std::vector<int> values(tempValues, tempValues + sizeof tempValues / sizeof tempValues[0]);
于 2012-11-07T20:13:46.310 回答