У меня сейчас проблемы с циклом чтения новых значений в переменные.Он отлично работает для вершин, ребер и начальных переменных, но он будет работать только в первый раз для переменных from_, to_, weight_ и dir.Каждый раз, когда цикл for повторяется после этого, он все еще использует вторую строку (0 1 4 false).Мне стыдно за то, что мне нужно постить за что-то настолько скудное, но я не могу на всю жизнь понять, что происходит.Я включил входной файл, а также функцию, которая используется из файла реализации, который использует объект структуры Edge, который помещается в объект списка в векторе.Пожалуйста, дайте мне знать, если я должен публиковать больше, хотя я думаю, что проблема просто связана с тем, как я использую файл ввода / вывода.
#include "graph.h"
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <limits>
#include <fstream>
int main()
{
std::ifstream infile;
infile.open("graph.txt");
int vertices, edges, start;
infile >> vertices >> edges >> start;
Graph graph(vertices);
int from_, to_;
double weight_;
bool dir;
std::cout << "Constructing graph" << std::endl;
int i = edges;
for (int i=0;i<edges;i++)
{
infile >> from_ >> to_ >> weight_ >> dir;
graph.addEdge(from_, to_, weight_, dir);
}
infile.close();
return 0;
}
Входной файл (graph.txt):
6 8 2
0 1 4 false
0 2 7.5 false
1 3 2 false
1 4 5 false
2 3 3.1 false
2 5 6.9 false
3 4 1 false
4 5 3 false
Функция в файле реализации:
void Graph::addEdge(int from, int to, double weight, bool isDir)
{
std::cout<< "Representing edge " << from << "," << to << " weight "
<< weight << std::endl;
Edge e1(from,to,weight);
if (adjacent.size() < std::max(from, to) + 1)
adjacent.resize(std::max(from,to) +1);
adjacent[from].push_back(e1);
std::cout << "Edge added" <<std::endl;
if (isDir == false)
{
Edge e2(to,from,weight);
adjacent[to].push_back(e2);
}
}