c++ - vector 不是 "saving values"C++

标签 c++ vector

当从 vector 中读取时,我将值放入我得到零大小。我有:

class Graph {
public:
    vector<Vertex> vertices;
};

class Vertex {
public:
    vector<int> adjacentVertices;
};

然后在我的加载方法中:

int vertices, edges;
cin >> vertices >> edges;
Graph mainGraph;
mainGraph.vertices.reserve(static_cast<unsigned int>(vertices));
int tmp1, tmp2;
for (int i = 0; i < edges; i++) {
    cin >> tmp1 >> tmp2;
    mainGraph.vertices[tmp1].adjacentVertices.push_back(tmp2);
    cout << mainGraph.vertices[tmp1].adjacentVertices.size(); //PRINTS NUMBERS -> SEEMS OKAY
}

cout << mainGraph.vertices.size(); //IS ZERO???

for(const Vertex &v : mainGraph.vertices){ //CRASHES
    cout << v.adjacentVertices.size();
}

我敢打赌这很愚蠢,但我错过了什么?我读到如果不需要特殊的构造函数, vector 将在使用时自行构建。

最佳答案

改变这个:

mainGraph.vertices.reserve(static_cast<unsigned int>(vertices));

为此:

mainGraph.vertices.resize(static_cast<unsigned int>(vertices));

自从 reserve()未创建 vector 的单元格,这可以通过 resize() 完成.

因此,在您的代码中,当您执行 mainGraph.vertices[tmp1] 时,您调用了未定义的行为 (UB),因为您试图访问一个对象尚未 build !

关于c++ - vector 不是 "saving values"C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52970935/

相关文章:

c++ - 使用 CreateProcess 时从进程返回错误代码

c++ - 获取指向 vector 元素的指针

c++ - 如何在 visual studio 2015 构建结束时复制文件

r - 如何使广义函数更新向量的值?

r - 按特定顺序将 R 中的向量转换为下/上三角矩阵

double 类型的 C++ 变量总是将它们的值更改为 -9,25596e+061

C++ 风格的 vector - 指针数组还是数组?

C++帮助类继承

c++ - 如何使用 extern 声明枚举类型

c++ - 提高C++应用程序启动速度的方法