C ++崩溃:嵌套向量上的push_back

里托班·罗伊·乔杜里
#include <iostream>
#include <vector>

using namespace std;

struct Neighbor
{
    int index;
    int weight;
    Neighbor(int, int);
};

Neighbor::Neighbor(int index, int weight)
{
    Neighbor::index = index;
    Neighbor::weight = weight;
}

void addEdge(vector<vector<Neighbor> > &graph, int v1, int v2, int weight)
{
    graph[v1].push_back(Neighbor(v2, weight));
    graph[v2].push_back(Neighbor(v1, weight));
}

int main()
{
    vector<vector<Neighbor> > graph;
    vector<vector<Neighbor> > graphIterator;
    graph[0].push_back(Neighbor(1, 5));
    graph[0].push_back(Neighbor(3, 3));
    graph[0].push_back(Neighbor(4, 2.5));

    graph[1].push_back(Neighbor(0, 5));
    graph[1].push_back(Neighbor(2, 3));

    graph[2].push_back(Neighbor(1, 3));
    graph[2].push_back(Neighbor(4, 2.5));
    graph[2].push_back(Neighbor(3, 5));

    graph[3].push_back(Neighbor(0, 3));
    graph[3].push_back(Neighbor(2, 5));
    graph[3].push_back(Neighbor(4, 2.5));

    graph[4].push_back(Neighbor(0, 2.5));
    graph[4].push_back(Neighbor(2, 2.5));
    graph[4].push_back(Neighbor(3, 2.5));

    return 0;
}

上面是我的代码,运行时似乎崩溃了。尽管声明矢量图似乎可以正常工作,但是即使我包含了我的第一个push_back语句,程序也会崩溃。有人可以建议我吗?

songyuanyao

graph[0].push_back(Neighbor(1, 5));graph仍然为空时,它没有任何元素并graph[0]通向UB。

您应该首先添加元素,例如:

graph.push_back(vector<Neighbor>()); // add one element
...

或者

vector<vector<Neighbor> > graph(5); // construct vector with 5 elements

或者

vector<vector<Neighbor> > graph;
graph.resize(5);                    // resize vector to contain 5 elements.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++:在push_back上迭代指针的向量时出现分段错误

向量 push_back 不起作用 C++

C ++ STD向量push_back似乎不起作用

C ++:指针向量在push_back()之后丢失引用

在C ++中的向量中使用push_back vs at

C++-运行时错误:向量push_back()

C ++向量的insert和push_back差异

c ++向量中的push_back与operator []分配

for循环中的C ++向量push_back异步对象

c ++向量push_back移动新元素

在C ++中将push_back值向量化的函数

C++ 向量 push_back 不复制?

C ++ push_back方法

与C ++中使用push_back相比,声明具有大小的向量是否有任何改进?

为什么向量 push_back 在 C++ 中调用两次?

在C ++中将向量push_back与<string>一起使用会出错

C ++没有匹配函数来调用向量push_back

向量字符串push_back在C ++中不起作用

push_back / append或在C ++ Armadillo中附加带有循环的向量

C ++ 11引用类型的成员变量,向量push_back之后的行为不同

循环内创建的对象调用哪个C ++向量push_back

为什么不能在2D向量中进行push_back?C ++

c ++交叉遗传算法push_back向量覆盖了旧的

c++ push_back() 将结构体转换为向量

在 c++11 中的向量中的第 1000 个元素之后无法 push_back()

为什么我在对向量的第二个元素“push_back”中有 C3867 错误?

C ++:push_back()和back()与指针的行为

指针向量在 push_back 上引发错误

C++:向量 push_back() 的时间复杂度 - 试图理解 C++ Primer 5th Ed - Stanley Lipmann