c++ - C++ std::vector of array 的编译器错误

标签 c++ arrays stdvector

以下代码不能用 gcc 4.7.0 编译(使用 std=c++11 -O3)

int n;
std::vector< int[4] > A;
A.resize(n);

错误信息是长度,但最终

functional cast to array type ‘_ValueType {aka int[4]}‘

这是正确的吗?还是应该编译?更重要的是,如何避免这个问题? (没有定义一个新的结构来保存 int[4])

编辑:

如何解决C++98的问题?

最佳答案

您不能将数组存储在 vector 或任何其他容器中。要存储在容器中的元素类型(称为容器的值类型)必须是可复制构造和可赋值的。数组两者都不是。

但是,您可以使用数组类模板,例如 Boost、TR1 和 C++0x 提供的模板:

std::vector<std::array<type, size> >

(您需要将 std::array 替换为 std::tr1::array 以使用 C++ TR1 中包含的模板,或将 boost::array 替换为使用 Boost libraries 中的模板。或者,您可以自己写;这很简单。)

@source作者:詹姆斯·麦克内利斯

所以代码看起来像这样:

int n;
std::vector<std::array<int,3>> A;
A.resize(n);

关于c++ - C++ std::vector of array 的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184828/

相关文章:

c++ - 复制目录的所有内容并创建一个 zip 文件

c++ - 在 C++ 中移动 vector 的值

java - 连接 4 检查获胜算法

c++ - std::vector::data() 重新分配安全吗?

c++ - C++中的坐标系

c++ - 即使使用 -lstdc++fs 也无法链接 std::filesystem

java - Java数组:关于大小的意外行为?

c - 删除静态声明的数组的前两个元素不起作用

c++ - 将不同的 std::tuple 类型存储在数组、 vector 或?

c++ - msvc is_copy_assignable 始终为真?