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

时间:2013-08-30 19:10:10

标签: c++

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

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

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

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

6 个答案:

答案 0 :(得分:41)

许多答案和评论都有正确的想法,但语法真的很难看。以下是两种很好的表达方式。

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

答案 1 :(得分:5)

查看此处的文档

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

我希望您通过

访问您的元素
secondToLast = myVector[myVector.size() - 2];

答案 2 :(得分:1)

您可以尝试这样做: -

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

答案 3 :(得分:0)

这取决于“倒数第二个元素”的含义。采用以下迭代器定义...

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

it--; 
it--;

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

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

cout << *it;

答案 4 :(得分:0)

有时列表中的项目可能少于2个,因此myVector.size()-2或其他直接访问器将引发错误。我已经做了以下工作。 。

for (int i = 0; i < myVector.size(); i++)
{
    if (myVector.size() > 1)
    {
        secondToLast = myVector[myVector.size() - 2];
    }
}

答案 5 :(得分:0)

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

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

您可以检查矢量属性,其中有一个不错的位。

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