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++ - 如何用 NULL 初始化成对 vector (c++)

c++ - 解决 "Theater Row"脑筋急转弯的代码

javascript - 随机排列,因此没有两个键在同一位置

javascript - 操作数组和对象

java - 如何计算Java中可能具有相同计数的最重复值

c++ - std::vector 如何访问它们之间有巨大差距的元素?

c++ - 在图算法中,确定节点是否被访问的最佳方法是什么?

c++ - 如何绘制非客户区?

c++ - 在不调用析构函数的情况下结束 STL 容器的生命周期

c++ - 如何在类的构造函数中定义成员 vector 的大小?