Итератор и 2d вектор - PullRequest
       29

Итератор и 2d вектор

0 голосов
/ 17 ноября 2009
vector< vector<int> >::iterator temp = mincost.end();
vector<int> a = *temp;
if ( *temp != *(temp--) ) 
    return 0;

mincost - это двумерный вектор, я хочу получить последние vector<int> этого вектора и last--. Я не очень понимаю об итераторе :). Помоги мне !! : D Thx ^^

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

minconst.end() указывает на элемент один за другим вектора minconst; он не указывает на последний элемент в векторе.

Поскольку вам нужны последние два элемента, вы должны сначала проверить, действительно ли вектор содержит двух элементов, в противном случае неизбежно возникнут проблемы. Тогда доступ к последним элементам в векторе - это просто вопрос *(minconst.end() - 1) и т. Д.

Справочник по C ++ также содержит описание итераторов .

0 голосов
/ 19 ноября 2009

Если вы не знакомы с контейнерами STL, думайте об итераторе end () как о символе '\ 0' в C-строках - они определяют, где находится конец, но фактическое значение, которое они несут, не полезно , Если вы разыменуете конечный итератор, вы получите мусор или, скорее всего, исключение.

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

       if (!mincost.empty())
       {
             //it contains atleast one 1-d vector and the 'end' iterator.
             iter = mincost.end();
             --iter;
             //dereference iter here.
       }

Как только вы освоитесь с итераторами, посмотрите на reverse_iterator. Как упоминал Эффо, они являются лучшим решением здесь.

0 голосов
/ 17 ноября 2009

Вероятно, было бы полезно узнать об итераторах в целом.

Быстрый поиск в Google приводит ко многим хорошим ссылкам, не последним из которых является http://www.cppreference.com/wiki/stl/iterators

Удачи!

...