【问题标题】: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&lt;int&gt;。顺便说一句,可变长度数组是非标准的。
  • 你有一个向量数组。在您的代码示例中,您将两个元素推入第一个向量,一个推入第二个,另外两个推入第三个。每个元素都被推送到向量后面的新条目,而不是相同的初始位置元素。然后在打印输出中遍历三个向量,并打印每个向量中的所有元素。我是否正确理解了您的问题?
  • @김선달“可变长度数组是非标准的”是什么意思?
  • @OP vector&lt;int&gt; vec[V]; -- 我猜你还没有完全意识到向量的目的是什么。它是有一个N 项目的动态数组。那么你为什么不在这里完全使用矢量呢?使用std::vector&lt;std::vector&lt;int&gt;&gt; vec(V); 你现在有一个由V 向量组成的向量。

标签: c++ vector


【解决方案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;

这将简化您的算法实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多