iam*_*ind 1 c++ arrays compiler-errors vector
以下声明通过编译检查:
int arr[3];
vector<int[3]> vec; // ok !!
Run Code Online (Sandbox Code Playgroud)
当试图vec实际使用时,
vec.push_back(arr);
Run Code Online (Sandbox Code Playgroud)
它导致许多错误,如:
/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: ISO C++ forbids initialization in array new [-fpermissive]
/usr/include/c++/4.6/bits/vector.tcc:314:4: error: invalid array assignment
/usr/include/c++/4.6/ext/new_allocator.h:118:30: error: request for member ‘~int [3]’ in ‘* __p’, which is of non-class type ‘int [3]’
Run Code Online (Sandbox Code Playgroud)
另外,vec也不push_back()是int*.
这到底出了什么问题?是否在C++ 11中解决了这个问题?
Alo*_*ave 10
标准库容器的基本要求是元素应该是Copy constructible和Assignable.
数组不可分配,因此错误,您不能将它们用作标准库容器元素.
参考:
C++ 03标准:23.1容器要求[lib.container.requirements]
第3段:
存储在这些组件中的对象类型必须满足CopyConstructible类型(20.1.3)的要求,以及可分配类型的附加要求.
您不能将数组存储在容器中,因为它们既不可分配也不可复制,这是与标准库容器一起使用的所有对象的要求.
当你做赋值运算符是唯一尝试push_back()这就是为什么你的代码编译没有它.
vector与任何其他容器一样,s无法存储数组,原因与您无法将数组分配给另一个数组的原因相同.你有几个选择:
std::vector< std::vector<int> >.std::vector的std::array.那你就是vec那种类型std::vector< std::array<int, 3> >.