矢量数组是否形成2D矢量?

时间:2017-08-31 19:04:26

标签: c++ pointers vector graph

以下语句是否构成2D矢量?

如果有的话,还要提到矢量的尺寸。还有另一种声明全局2D矢量的方法吗?

说明:

var client = clients.pop();
    client.end(//some data here));

以上陈述已用于声明图表的全局邻接矩阵。

似乎你们中的很多人都不清楚这个问题。我想使用向量声明一个全局邻接列表,这样我可以在图形中直接添加边缘,如v [a] .push_back(b)。为此,我必须指定向量的第一维,同时在执行main之前声明我没有的向量。

1 个答案:

答案 0 :(得分:2)

不,但它给出了类似的行为。所以你创建的是一个指向矢量数组的指针。所以你最终会得到这个:

adj[0] = []
adj[1] = []
...
adj[number_nodes] = []

并且执行push_back是添加到向量的合法方式:

adj[0].push_back(some_num) -->  adj[0] = [some_num]

但这是一种可怕的方法来解决这个问题!为什么?

  • 您正在使用必须管理的原始内存,并确保删除。
  • 您无法在矩阵的第一维使用任何令人敬畏的std::vector功能。
  • 除非你知道变量number_of_nodes,否则没有好办法计算出矢量的大小。
  • ......一长串清单,但你明白了。

您已经可以看到std::vector可以用作1D矩阵。所以使用2个向量:

std::vector<std::vector<int>> Matrix2D;

如果您需要某个尺寸的初始尺寸,那么您可以这样做:

std::vector<std::vector<int>> Matrix2D(number_of_nodes, std::vector<int>());

或者这个:

Matrix2D.resize(number_of_nodes);

或者,如果在编译时修复了该大小,那么您甚至可以这样做:

const int number_of_nodes = 10;
std::array<std::vector<int>, number_of_nodes> Matrix2D;

或者进一步扩大并获得像Eigen.

这样的Matrix使用库