【问题标题】:how to create a vector of int 2D array in c++ [duplicate]如何在c ++中创建一个int 2D数组的向量[重复]
【发布时间】:2014-03-17 01:32:45
【问题描述】:

我正在尝试在 C++ 中创建一个 int 二维数组的向量 但是我的以下代码有一些我无法理解的错误?!

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

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

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

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

我也尝试将一个数组 push_back 到 vecotr,但它也没有成功!为什么?

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

提前致谢

【问题讨论】:

  • 您能告诉我们您遇到了什么错误吗?
  • 这个问题已经被问过很多次了!但容器的选择可能会有所不同。

标签: c++ arrays vector multidimensional-array


【解决方案1】:

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

但是,包装器 std::array&lt;T,N&gt; 是,所以 std::vector&lt;std::array&lt;std::array&lt;int, 2&gt;, 2&gt; &gt; 是做你想做的事情的一种方式。

【讨论】:

  • 如果您能解释为什么使用 std:array 是一种垃圾的做事方式,我将不胜感激。我只会自己使用 new 而不会打扰原生数组,但我仍然很好奇。
  • @batbrat:嗯,我在那儿有点戏剧化,但是对于单一类型来说嵌套很多。我更倾向于创建一个派生std::array&lt;int, 4&gt; 并在其之上实现二维索引的类MyNewClass,这样你最终会得到一个简单的std::vector&lt;MyNewClass&gt;...尽管很多人会告诉你这个是过度工程。包括,其实,我。 :)
  • 感谢@Lightness Races in Orbit
  • @batbrat:不客气。
【解决方案2】:

您可以通过这种方式创建二维矢量:std::vector &lt;std::vector &lt;data_type&gt; &gt; vector_name

注意:在 C++03 中,&gt;&gt; 之间必须有一个空格。

【讨论】:

  • C++03 中需要空格,C++11 中不需要。
  • 在 C++11 中,> 和 > 之间不再需要有空格
  • @YoungJohn 和 Jarod42 感谢您告诉我。我不太了解 C++11 功能。很快就会看到。
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2021-05-28
  • 2020-03-01
  • 1970-01-01
相关资源
最近更新 更多