Каков код второго для последнего элемента в векторе
Я пытаюсь создать программу, которая использует второй-последний элемент в векторе, до сих пор я использовал: (arr2.rbegin() + 1)
Если я использую оператор сравнения в условном выражении, например:
if(arr2.rbegin()+1 == true)
Я получаю сообщение об ошибке: 'no match for operator =='
Ответы
Ответ 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
Ответ 2
глядя на документацию здесь
http://www.cplusplus.com/reference/vector/vector/?kw=vector
Я ожидаю, что вы получите доступ к своему элементу
secondToLast = myVector[myVector.size() - 2];
Ответ 3
Вы можете попробовать сделать так: -
if(*(arr2.rbegin()+1))
Ответ 4
Это зависит от того, что вы подразумеваете под "вторым до последнего элемента". Возьмем следующее определение итератора...
vector<int>::iterator it = arr2.end();
it--;
it--;
Вы должны уменьшить итератор дважды, потому что, когда вы объявляете итератор "точкой" до конца, он фактически ссылается на местоположение ПОСЛЕ последнего элемента в векторе.
Не забывайте, что когда вы хотите указать значение, на которое указывает итератор, вы должны разыменовать его. как это...
cout << *it;