一个向量索引处的多个元素
Posted
技术标签:
【中文标题】一个向量索引处的多个元素【英文标题】:Multiple elements at one vector index 【发布时间】: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 ***.com/questions/1887097/…
@OP vector<int> vec[V];
-- 我猜你还没有完全意识到向量的目的是什么。它是有一个N
项目的动态数组。那么你为什么不在这里完全使用矢量呢?使用std::vector<std::vector<int>> vec(V);
你现在有一个由V
向量组成的向量。
【参考方案1】:
好吧,你可能误解了输出代码的工作原理
for(int i=0; i<V; ++i) // for each vector element in the array vec[3]
for(auto p : vec[i]) // for each element in the vector.
cout << p << ' ';
cout << '\n';
每个 p 都是一个向量,包含许多元素。 vec 是一个包含 3 个元素的数组。
如果你有很多边,这可能是一个优化,否则你可以做一个
struct edge int from; int to; double weight; ;
std::vector<edge> E;
这将简化您的算法实现。
【讨论】:
以上是关于一个向量索引处的多个元素的主要内容,如果未能解决你的问题,请参考以下文章