繁体   English   中英

std ::数组的向量

[英]std::vector of an array

以下声明通过编译检查:

int arr[3];
vector<int[3]> vec;  // ok !!

尝试将vec实际用作时,

vec.push_back(arr);

它导致许多错误,例如:

/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]’

另外, vec也不将int* push_back()

这里到底出了什么问题? C ++ 11中是否解决了此类问题?

标准库容器的基本要求是,元素应为Copy可构造可分配的

数组不可分配,因此会出现错误,您不能将它们用作标准库容器元素。

参考:

C ++ 03 Standard:23.1容器要求[lib.container.requirements]

第3段:

存储在这些组件中的对象的类型必须满足CopyConstructible类型(20.1.3)的要求以及Assignable类型的其他要求

您不能将数组存储在容器中,因为它们既不可分配也不可复制,这是与标准库容器一起使用的所有对象的要求。

仅当您执行push_back()时才尝试使用赋值运算符,这就是为什么代码不使用它即可编译的原因

与其他容器一样, vector s也无法存储数组,原因与您无法将数组分配给另一个数组的原因相同。 您有两种选择:

  • 显而易见的是使用std::vector< std::vector<int> >
  • 如果您想要更多的C ++ 11解决方案,可能会发现std::arraystd::vector更好。 然后,您将得到vec类型为std::vector< std::array<int, 3> >

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM