std :: list的[]运算符?

时间:2011-09-12 13:35:30

标签: c++ list operator-overloading

我处于无法使用vector的情况,因为我使用&element[x]然后添加更多项目,因此指针无效。问题是std::list似乎没有超载operator [],也没有提供at()方法。因此,我看到我可以模拟at()的唯一方法是使用迭代器。有没有更好的方法呢?

3 个答案:

答案 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是一个链表。无法直接访问一个元素。唯一可能从头开始迭代元素。