C中的多维向量

新手上路,请多包涵

我刚开始学习C++。当我开始感到相当困惑时,我试图掌握多维数组和向量的语法。我知道如何初始化多维数组。看起来很简单:行后跟列。但是,向量更具挑战性。我必须以相同的方式初始化它们还是创建一个向量向量?

原文由 Nikhil Sridhar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 834
2 个回答

如果您能够使用 C++11,则可以以类似的方式初始化多维数组和向量的向量。

 int a1[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
std::vector<std::vector<int>> a2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

但是,必须了解一些差异才能访问元素而不会遇到未定义的行为。

对于多维数组,需要连续分配数组元素的内存。对于向量的向量,元素的内存很可能是不相交的。

a1 的内存:

 a1[0][0]    a1[1][0]    a1[2][0]
|           |           |
v           v           v
+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+

a2 (最有可能)的内存:

 a2[0][0]
|
v
+---+---+---+
|   |   |   |
+---+---+---+

a2[1][0]
|
v
+---+---+---+
|   |   |   |
+---+---+---+

a2[2][0]
|
v
+---+---+---+
|   |   |   |
+---+---+---+

此外,可以定义每行的列数不同的向量的向量。

 std::vector<std::vector<int>> a2 = { {1, 2, 3}, {4, 5}, {6, 7, 8, 9} };

在多维数组中,保证每一行的列数相同。

鉴于上述多维数组 a1a1[1][2] 将是有效元素,而 a1[2][3] 将是无效元素。在向量向量的情况下,使用上述行, a2[1][2] 不是有效元素,而 a2[2][3] 是有效元素。

原文由 R Sahu 发布,翻译遵循 CC BY-SA 3.0 许可协议

声明一个多维向量:

 vector<vector<int>> test(4,vector<int>(20));

这将创建一个 4 X 20 的 2D 矢量。当然,因为它们是可以根据需要更改的矢量。索引与数组 test[3][19] 相同。

原文由 tinstaafl 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题