我处于无法使用vector
的情况,因为我使用&element[x]
然后添加更多项目,因此指针无效。问题是std::list
似乎没有超载operator []
,也没有提供at()
方法。因此,我看到我可以模拟at()
的唯一方法是使用迭代器。有没有更好的方法呢?
答案 0 :(得分:9)
你应该重新考虑你的设计。
尝试为std::list
模拟operator[]
或at
会导致性能灾难:这些操作需要O(N)而不是O(1)时间std::list::iterator
是双向迭代器,而不是随机访问迭代器。因此,如果您现在遍历容器并为每个元素调用[]
或at
,则会导致O(N * N)而不是O(N)。
这就是为std::list
提供这些操作的原因。
答案 1 :(得分:4)
#include <iterator>
std::list<int> l;
std::list<int>::iterator it = l.begin();
std::advance(it, 37);
对于非随机访问迭代器(如list
的迭代器),当然这需要线性时间。
答案 2 :(得分:0)
没有std :: list是一个链表。无法直接访问一个元素。唯一可能从头开始迭代元素。