如何在旧c++中初始化const-std向量



我的C++编译器标识为GNU 4.4.1

我认为自从c++11以来,你可以用这种方式初始化向量:

const std::vector<int> myVector = {1, 2, 3};
const std::vector<int> myVector2{1, 2, 3};

不幸的是,我没有使用c++11,所以myVector可以通过构造函数初始化。我需要创建一个永远不会被修改的向量。它必须由类中的differents函数共享,这样它也可以是静态的,甚至可以是类成员。当我的向量在c++98中定义时,有没有一种方法可以初始化它,就像上面的例子一样,或者类似的东西?

您可以从函数返回向量:

std::vector<int> f();
const std::vector<int> myVector = f();

或者,使用boost::assign::list_of。

@vll的答案可能更好,但您也可以这样做:

int temp[] = {1, 2, 3};
const std::vector<int> myVector(temp, temp + sizeof(temp)/sizeof(temp[0]));

但是,它确实创建了两个副本,而不是一个副本,并且用数组的名称污染了命名空间。

您已经得到了两个不错的答案。这只是两者的结合:

namespace detail {
template<typename T, size_t N>
size_t size(const T (&)[N]) { return N; }
std::vector<int> vecinit() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
return std::vector<int>(arr, arr+size(arr));
}
}
//...
const std::vector<int> myVector(detail::vecinit());

最新更新