C++ 从后面访问向量
有没有办法从后面开始访问向量上的元素?我想访问最后的第二个元素。目前,我正在使用以下方法来实现这一点:C++ 从后面访问向量,c++,vector,C++,Vector,有没有办法从后面开始访问向量上的元素?我想访问最后的第二个元素。目前,我正在使用以下方法来实现这一点: myVector[myVector.size() - 2] 但这看起来又慢又笨重,有没有更好的方法?不太可能更快,但这看起来可能更好: myVector.end()[-2] 您可以始终使用vector::back()。如果要从后面迭代,请使用反向迭代器: vector<something>::reverse_iterator iter = v.rbegin(); iter++;
myVector[myVector.size() - 2]
但这看起来又慢又笨重,有没有更好的方法?不太可能更快,但这看起来可能更好:
myVector.end()[-2]
您可以始终使用vector::back()。如果要从后面迭代,请使用反向迭代器:
vector<something>::reverse_iterator iter = v.rbegin();
iter++; //Iterates backwards
向量::反向迭代器iter=v.rbegin();
iter++//向后迭代
向量是为快速随机访问而设计的,所以你的方式也很好。在任何索引处访问向量元素都是一个O(1)操作。您的方法完全有效并且非常快,除了您应该检查
myVector.size()>1
或者我可以像myVector一样执行此操作。at(myVector.end-2)并使其更慢。at
使用异常来指示超出范围的错误。我不会在这个简单的例子中使用它。或者myVector.rbegin()[1]
@Pavel:我最喜欢这个解决方案,它最有意义,看起来也很干净。请注意,Ben关于这不是真的更快的观点仍然适用。但是,这是可移植的吗?重载索引运算符是否需要std::vector::iterator
?它通常会工作,因为std::vector::iterator
通常是一个类型定义的指针。但是,这能保证吗?@Caspin:是的std::vector
提供随机访问迭代器,这是随机访问迭代器的属性之一;