У меня перегружен оператор << для печати всех элементов вектора, но он не работает? - PullRequest
0 голосов
/ 18 марта 2019

Я работаю над векторными указателями для проекта, но я не могу напечатать все элементы в векторе.Я пытался перегрузить оператор, но это не правильно:

vector<list<int*>*> *v = new vector<list<int*>*> { 
    new list<int*> {new int(2), new int (7)}, 
    new list<int*> {new int(2), new int (7)}
};

for (int i = 0; i < v->size(); i++) {
    auto a = v[i].begin();
    while (a != v[i].end()) {
        cout << **a;
        a++;
    }
}

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Попробуйте это:

for(const auto& i : *v)
    for(const auto& j: *i)
        cout<<*j<<" ";

есть ли причина использовать так много указателей? Ваш код может быть намного проще, как это:

   vector<list<int>> v {
   list<int> {2, 7},
   list<int> {2, 7}
};

for(const auto& i : v)
    for(const auto& j: i)
        cout<<j<<" ";
0 голосов
/ 18 марта 2019

Просто слишком много указателей, но чтобы правильно переписать ваш код, в том же стиле, что и вы, попробуйте это

for (int i = 0; i < v->size(); i++) {
    auto a = (*v)[i]->begin();
    while (a != (*v)[i]->end()) {
        cout << **a;
        a++;
    }
}

Поскольку v - указатель на вектор, вы должны написать(*v)[i] чтобы получить элемент из вектора.Затем, поскольку этот элемент сам по себе является указателем на список, поэтому вам нужно написать ->begin(), чтобы получить итератор списка.

Можно писать программы без такого количества указателей.

...