我正在尝试构建一个使用向量中倒数第二个元素的程序,到目前为止我已经使用过:(arr2.rbegin()+1)
如果我在条件中使用比较运算符,例如:
if(arr2.rbegin()+1 == true)
我收到一条错误消息:'no match for operator =='
我正在尝试构建一个使用向量中倒数第二个元素的程序,到目前为止我已经使用过:(arr2.rbegin()+1)
如果我在条件中使用比较运算符,例如:
if(arr2.rbegin()+1 == true)
我收到一条错误消息:'no match for operator =='
许多答案和评论都有正确的想法,但语法真的很丑。这里有两种很好的表达方式。
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
在这里查看文档
http://www.cplusplus.com/reference/vector/vector/?kw=vector
我希望您通过以下方式访问您的元素
secondToLast = myVector[myVector.size() - 2];
您可以尝试这样做:-
if(*(arr2.rbegin()+1))
有时列表中的项目可能少于 2 个,因此 myVector.size() - 2 或其他直接访问器会抛出错误。我已经完成了以下操作。. .
if (myVector.size() > 1)
{
secondToLast = myVector[myVector.size() - 2];
}
这取决于您所说的“倒数第二个元素”是什么意思。采用以下迭代器定义...
vector<int>::iterator it = arr2.end();
it--;
it--;
您必须对迭代器进行两次贬值,因为当您将迭代器声明为“指向”末尾时,它实际上引用了向量中最后一个元素之后的位置。
不要忘记,当您想要迭代器指向的值时,您必须取消引用它。像这样...
cout << *it;
有很多方法可以从后面访问元素,您可以使用 std::vector 容器附带的 back 属性,如果您想从后面访问元素(最后一个元素或最多 n 个),您可以这样做这个
std::vector vec{1,2,3}; int lastsecond = vec.back()-1; 会给你-> 2;
您可以检查有一些不错的矢量属性。