Подтвердить что ты не робот

Каков код второго для последнего элемента в векторе

Я пытаюсь создать программу, которая использует второй-последний элемент в векторе, до сих пор я использовал: (arr2.rbegin() + 1)

Если я использую оператор сравнения в условном выражении, например:

if(arr2.rbegin()+1 == true) 

Я получаю сообщение об ошибке: 'no match for operator =='

4b9b3361

Ответ 1

Многие ответы и комментарии имеют правильную идею, но действительно уродливый синтаксис. Вот два хороших способа выразить это.

arr2.end()[-2] // end() is past the last element, -1 for last element, -2 for second-last
arr2.rbegin()[1] // rbegin() is reverse order starting at 0 for last element, 1 for second-last

Демо: http://ideone.com/2cZeUq

Это работает, потому что RandomAccessIterator, для которого vector требуется, требуется operator[], чтобы it[n] был эквивалентен *(it + n), как и для указателей.

Итак, код в вашем вопросе становится просто

if (arr2.rbegin()[1]) // test penultimate element

Ответ 3

Вы можете попробовать сделать так: -

if(*(arr2.rbegin()+1))

Ответ 4

Это зависит от того, что вы подразумеваете под "вторым до последнего элемента". Возьмем следующее определение итератора...

vector<int>::iterator it = arr2.end();

it--; 
it--;

Вы должны уменьшить итератор дважды, потому что, когда вы объявляете итератор "точкой" до конца, он фактически ссылается на местоположение ПОСЛЕ последнего элемента в векторе.

Не забывайте, что когда вы хотите указать значение, на которое указывает итератор, вы должны разыменовать его. как это...

cout << *it;