Как получить предыдущий элемент списка, используя тот же итератор? - PullRequest
2 голосов
/ 28 января 2020

Я делаю решатель судоку, и мне не удается заставить вернуться к работе, ссылаясь на последний элемент моего списка (который содержит позиции пробелов).

Код ниже показывает мой наивный инициал Подход к этому вопросу:

void solve(int arr[9][9])
{
    position CurrentPos;

    list<position>::iterator j;
    for (j = blankSpaces.begin();  j != blankSpaces.end();  j++)
    {
        CurrentPos.row = j->row;
        CurrentPos.col = j->col;

        for (int i = arr[CurrentPos.row][CurrentPos.col] + 1; i < 10; i++)
        {
            if (valid(arr, CurrentPos, i))
            {
                arr[CurrentPos.row][CurrentPos.col] = i;
                visitedStack.emplace_front(CurrentPos);
            }
            if (!(valid(arr, CurrentPos, i)) && (i == 9))
            {
                j--;
            }
        }
    }

}

1 Ответ

1 голос
/ 28 января 2020

Вы можете получить последний элемент списка, выполнив следующее:

#include <iostream>
#include <iterator>
#include <list>

int main () {
    std::list<int> mylist;
    for (int i = 0; i < 10; i++)
        mylist.push_back (i*10);

    auto last = std::prev(mylist.end());
    std::cout << "The last element is " << *last << '\n';

    return 0;
}

Или вы можете получить итератор перед другим итератором, используя то же самое, как это:

#include <iostream>
#include <iterator>
#include <list>

int main () {
    std::list<int> mylist;
    for (int i = 0; i < 10; i++)
        mylist.push_back (i*10);

    auto last = std::prev(mylist.end());
    auto prelast = std::prev(last);
    std::cout << "The last element is " << *last << '\n';
    std::cout << "The prelast element is " << *prelast << '\n';

    return 0;
}

Или просто используйте --, как вы уже делаете:

#include <iostream>
#include <iterator>
#include <list>

int main () {
    std::list<int> mylist;
    for (int i = 0; i < 10; i++)
        mylist.push_back (i*10);

    auto last = std::prev(mylist.end());
    auto prelast = std::prev(last);
    std::cout << "The last element is " << *last << '\n';
    std::cout << "The prelast element is " << *prelast << '\n';

    prelast--;
    std::cout << "The preprelast element is " << *prelast << '\n';

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...