【发布时间】:2021-07-08 02:21:08
【问题描述】:
我正在查看具有邻接列表的图的基本实现,我注意到表示在两个节点之间添加一条边,push_back 可以在单个索引上多次使用。我自己试过这个:
int V = 3;
vector<int> vec[V];
vec[0].push_back(23);
vec[0].push_back(24);
vec[1].push_back(52);
vec[2].push_back(4);
vec[2].push_back(-1);
我把它们打印出来了,一切正常:
for(int i=0; i<V; ++i) {
for(auto p : vec[i])
cout << p << ' ';
cout << '\n';
}
为什么多个p可以来自同一个索引i?我是不是在想一些事情,而这种行为应该是意料之中的?我认为向量只是一个可以改变大小的数组,而不是它的一个位置可以容纳许多元素。
【问题讨论】:
-
vec[V]是 向量数组。所以每个元素都是一个 vector<int>。顺便说一句,可变长度数组是非标准的。 -
你有一个向量数组。在您的代码示例中,您将两个元素推入第一个向量,一个推入第二个,另外两个推入第三个。每个元素都被推送到向量后面的新条目,而不是相同的初始位置元素。然后在打印输出中遍历三个向量,并打印每个向量中的所有元素。我是否正确理解了您的问题?
-
@김선달“可变长度数组是非标准的”是什么意思?
-
@cyberbisson stackoverflow.com/questions/1887097/…
-
@OP
vector<int> vec[V];-- 我猜你还没有完全意识到向量的目的是什么。它是有一个N项目的动态数组。那么你为什么不在这里完全使用矢量呢?使用std::vector<std::vector<int>> vec(V);你现在有一个由V向量组成的向量。