Как исправить ошибку «индекс вне диапазона» для векторов в C ++? - PullRequest
0 голосов
/ 02 апреля 2019

Ошибка вне диапазона для векторов в моем коде. Что я могу сделать, чтобы остановить ошибку? Я проверил так много форумов.

Я уже провел несколько основных испытаний, чтобы выяснить, не является ли что-то еще проблемой. Начиная с 0. Снова написал код с нуля. Используются другие IDE.

#include <iostream>
#include <vector>
#include "graph.h"
using namespace std;

graph::graph() {
    count = 0;
}
void graph::addVertex(const Node node) {
    vertices.push_back(node);
    count++;
}
void graph::addEdge(const char from, const char to) {
    vertices[from].edges.push_back(to);
    vertices[to].edges.push_back(from);
}
void graph::print() {
    unsigned int i = 0;
    while (i < vertices.size()) {
        cout << vertices[i].name << "->";
        if (vertices[i].edges.size() > 0)
            for (unsigned int j = 0; j < vertices[i].edges.size(); j++)
                cout << vertices[i].edges[j];
        cout << endl;
        i++;
    }

Результаты всегда приводят меня к строке 1733 векторного файла, и я не уверен, появится ли еще ошибка после ее исправления.

1 Ответ

0 голосов
/ 02 апреля 2019

Спасибо за ответы всех, особенно @ user4581301, я с ним повозился, и вывод получился желаемым с этой заменой функции addEdge.

void graph::addEdge(const char from, const char to) {
    if (vertices.size() == 0)
        return;
    for (int i = 0; i < vertices.size(); i++) {
        if (vertices[i].name == from)
            vertices[i].edges.push_back(to);
        if (vertices[i].name == to)
            vertices[i].edges.push_back(from);
    }
}
...