我的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());