Qua*_*ark 11 c++ stl vector c++11
我有一个std::vector,我想要iterator向量中的最后一个元素; 我将存储此迭代器供以后使用.
注意:我想要一个迭代器引用它,而不是std::vector::back.因为我希望能够从std::vector::begin后面开始计算这个对象的索引.
以下是我将迭代器放到最后一个元素的逻辑:
std::vector<int> container;
std::vector<int>::iterator it = container.end()--;
Run Code Online (Sandbox Code Playgroud)
由于std::vector::end具有O(1)时间复杂度,有没有更好的方法来做到这一点?
Bar*_*rry 26
我认为你的意思是:
std::vector<int>::iterator it = --container.end();
std::vector<int>::iterator it = container.end() - 1;
std::vector<int>::iterator it = std::prev(container.end());
Run Code Online (Sandbox Code Playgroud)
你无意中只是回来了end().但是所有这些的问题是当向量为空时会发生什么,否则它们都会在恒定时间内做正确的事情.虽然如果向量是空的,但无论如何都没有最后一个元素.
存储迭代器时也要小心 - 它们可能会失效.
请注意,如果vector<T>::iterator只是T*(这将是有效的),上面的第一个表格是不正确的.第二个工作无论如何,所以更可取.
Gal*_*lik 10
你这样做的方式会给你错误的迭代器,因为在赋值之后,post增量不会改变值.
总有这样的:
auto it = std::prev(container.end());
Run Code Online (Sandbox Code Playgroud)
请记住首先检查容器是否为空,以便迭代器存在于有效范围内.
你可以rbegin做到你需要的
auto last = container.rbegin();
Run Code Online (Sandbox Code Playgroud)