我的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只能由构造函数初始化。我需要创建一个永远不会被修改的向量。它必须由类中的不同函数共享,因此它也可以是静态的,甚至是类成员。有没有一种方法可以让我的向量在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());