Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从后面访问向量_C++_Vector - Fatal编程技术网

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
提供随机访问迭代器,这是随机访问迭代器的属性之一;