向量中倒数第二个元素的代码是什么

Per*_*son 26 c++

我正在尝试构建一个使用向量中倒数第二个元素的程序,到目前为止我已经使用过:(arr2.rbegin()+ 1)

如果我在条件中使用比较运算符,例如:

if(arr2.rbegin()+1 == true) 
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息: 'no match for operator =='

Ben*_*igt 47

许多答案和评论都有正确的想法,但语法真的很难看.这里有两种表达方式.

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
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/2cZeUq

它的工作原理是因为RandomAccessIterator的,它vector有,需要提供operator[]这样it[n]就等于*(it + n),就像为指针.

所以你问题中的代码就变得公正了

if (arr2.rbegin()[1]) // test penultimate element
Run Code Online (Sandbox Code Playgroud)

  • @Federico:不,`front()`和`back()`提供引用,而不是迭代器。指针算术不适用于引用。您可以执行`(&arr2.back())[-1]`,但这比使用迭代器丑陋。 (2认同)

Sam*_*ica 5

在这里查看文档

http://www.cplusplus.com/reference/vector/vector/?kw=vector

我希望您通过以下方式访问您的元素

secondToLast = myVector[myVector.size() - 2];
Run Code Online (Sandbox Code Playgroud)

  • @Damon:不,不应该。索引从“ 0”到“ size()-1”,最后是“ size()-1”。因此倒数第二个是`size()-2`。 (4认同)