我正在尝试构建一个使用向量中倒数第二个元素的程序,到目前为止我已经使用过:(arr2.rbegin()+ 1)
如果我在条件中使用比较运算符,例如:
if(arr2.rbegin()+1 == true)
我收到一条错误消息:'no match for operator =='
答案 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
它的工作原理是因为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;
您可以检查矢量属性,其中有一个不错的位。