34

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

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

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

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

4

6 回答 6

75

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

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

它之所以有效vector,是因为 RandomAccessIterator 需要提供operator[]it[n]等价的*(it + n),就像指针一样。

所以你问题中的代码就变成了

if (arr2.rbegin()[1]) // test penultimate element
于 2013-08-30T19:32:37.040 回答
7

在这里查看文档

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

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

secondToLast = myVector[myVector.size() - 2];
于 2013-08-30T19:13:19.253 回答
1

您可以尝试这样做:-

if(*(arr2.rbegin()+1))
于 2013-08-30T19:14:14.383 回答
1

有时列表中的项目可能少于 2 个,因此 myVector.size() - 2 或其他直接访问器会抛出错误。我已经完成了以下操作。. .

if (myVector.size() > 1)
{
    secondToLast = myVector[myVector.size() - 2];
}
于 2020-07-17T17:02:40.383 回答
0

这取决于您所说的“倒数第二个元素”是什么意思。采用以下迭代器定义...

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

it--; 
it--;

您必须对迭代器进行两次贬值,因为当您将迭代器声明为“指向”末尾时,它实际上引用了向量中最后一个元素之后的位置。

不要忘记,当您想要迭代器指向的值时,您必须取消引用它。像这样...

cout << *it;
于 2013-08-30T19:24:33.163 回答
-1

有很多方法可以从后面访问元素,您可以使用 std::vector 容器附带的 back 属性,如果您想从后面访问元素(最后一个元素或最多 n 个),您可以这样做这个

std::vector vec{1,2,3}; int lastsecond = vec.back()-1; 会给你-> 2;

您可以检查有一些不错的矢量属性。

https://en.cppreference.com/w/cpp/container/vector

于 2021-01-25T14:39:46.467 回答