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

Wal*_*ter 5 c++ arrays stdvector

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

int n;
std::vector< int[4] > A;
A.resize(n);
Run Code Online (Sandbox Code Playgroud)

错误消息是长度,但最终

functional cast to array type ‘_ValueType {aka int[4]}‘
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

her*_*arn 8

您无法将数组存储在向量或任何其他容器中.要存储在容器中的元素类型(称为容器的值类型)必须是可复制构造和可分配的.数组都不是.

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

std::vector<std::array<type, size> >
Run Code Online (Sandbox Code Playgroud)

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

@source作者:James McNellis

所以代码看起来像:

int n;
std::vector<std::array<int,3>> A;
A.resize(n);
Run Code Online (Sandbox Code Playgroud)