【发布时间】:2021-12-28 01:51:18
【问题描述】:
我有一个列表容器,看起来像:
std::list<int> l = {1,2,3,4,5,6,7,8};
我经常擦除元素,所以我选择std::list。
但是,我也想在O(1)中找到元素,所以我记录了reverse_iterator。
例如:
l.push_back(9);
auto s = l.rbegin(); // record the iterator of 9, in order to erase it in the future fastly.
cout << *s << endl;
l.push_back(10);
auto s2 = l.rbegin();
但是当我这样擦除时:
l.erase(std::next(s).base()); // s the iterator of 9, in my brain
我想擦除 9,但实际上,它擦除了 10。
我有两个问题:
为什么我应该使用next?实际上我的*s 可以获取元素,这与.end() 不同。
如何在我之前保存的迭代器中进行擦除?
【问题讨论】:
-
so i record the reverse_iterator.为什么不直接录制iterator?