如何在C++中创建int 2D数组的向量

3

我正在尝试在c++中创建一个int类型的二维数组向量,但是我的下面的代码有一些错误,我不知道为什么?!

vector< int[2][2] > vec;
int a[2][2];
vec.push_back(a);

我不想使用int ** int my vetor(并使用new创建一个2D数组)

我知道每个2D数组只有2列和行(大小是静态的)

那么有没有办法实现该向量呢?

我也尝试将一个数组推入vector中,但它也没有成功!为什么?

vector< int[2] > vec;
int a[2];
vec.push_back(a);

thanks in advance


你能告诉我们你遇到了什么错误吗? - Damien Black
这个问题已经被问了很多次!但是容器的选择可能会有所不同。 - user2672165
2个回答

8

原生数组不可复制、移动或赋值,因此它们不能存储在标准容器中。

然而,封装器std::array<T,N>是可以的,所以std::vector<std::array<std::array<int, 2>, 2> >是实现你想要的功能的一种方式。


如果您能解释为什么使用std:array<T,N>是一种垃圾方式,我将非常感激。我会自己使用new而不烦恼于本地数组,但我还是很好奇。 - batbrat
1
@batbrat:嗯,我有点夸张了,但是对于单个类型来说,这是很多嵌套。我更倾向于创建一个类MyNewClass,它派生自std::array<int, 4>并在其上实现2D索引,这样你就可以得到一个简单的std::vector<MyNewClass>...虽然许多人会告诉你这是过度工程化的。包括我在内。 :) - Lightness Races in Orbit
感谢 @Lightness Races in Orbit - batbrat
@batbrat:不用谢。 - Lightness Races in Orbit

0
你可以这样创建一个二维向量:std::vector<std::vector<data_type>> vector_name 注意:在 C++03 中,>> 之间必须有一个空格。

2
C++03需要在代码中使用空格,而C++11则不需要。 - Jarod42
在C++11中,不再需要在>和>之间有空格。 - YoungJohn
@YoungJohn 和 Jarod42,谢谢你们让我知道这个。我对 C++11 的特性不是很了解,会尽快查看。 - Shravan40

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接