Распечатать элемент структуры в векторе списков структур - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть структура;это выглядит так:

struct Edge {                                                   //Represents an edge
    int v1, v2;                                             // From vertex, To vertex
    double weight;                                          // Edge weight
    Edge(int vertex1, int vertex2, double wt) :             // Edge constructor
        v1{ vertex1 }, v2{ vertex2 }, weight{ wt } {};        // from, to, weight
};

У меня есть вектор списков этих структур;это выглядит так:

vector<list<Edge>> adjacent;

Мой вектор списков уже инициализирован, но я не могу понять, как распечатать элемент веса всех моих ребер.

list<Edge> ::iterator gr;               //list iterator
    for (int x = 0; x < numVertices; x++) {
        for (gr = adjacent[x].begin(); gr != adjacent[x].end(); ++gr) {
            cout << *gr.weight;
        }
    }

Это не работает.VS говорит мне, что у него нет члена "веса".У кого-нибудь есть решение?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

*gr.weight не уважает iterator первым.Это эквивалентно *(gr.weight).

Измените это на (*gr).weight или gr->weight;

0 голосов
/ 06 декабря 2018

gr - итератор, который во многих отношениях ведет себя как указатель, поэтому вы должны использовать gr->weight вместо *gr.weight.


Вместо этого рассмотрите циклы for на основе диапазона:

for (const auto &edgeList : adjacent)
{
    for (const auto &edge : edgeList)
    {
        cout << edge.weight << ' ';
    }
    cout << endl;
}
0 голосов
/ 06 декабря 2018

Должно быть:

cout << gr->weight;

Также эквивалентно выполнению:

cout << (*gr).weight;

Причина, по которой ваш файл не скомпилирован, заключается в operator precedence:

Оператор *a (косвенное обращение) имеет более низкий приоритет, чем оператор . (доступ к элементу).Так что в вашем случае он пытался найти член итератора с именем weight, что не удалось.

...