c++ - STL 不提供通过索引返回迭代器的函数有什么原因吗?

标签 c++ stl iterator

STL 不提供通过索引将迭代器返回到容器中的函数是有原因的吗?

例如,假设我想将一个元素插入 std::list 但在第 n 个位置。看来我必须通过 begin() 之类的方法检索迭代器并将 n 添加到该迭代器。我在想,如果我可以在第 n 个位置使用类似 std::list::get_nth_iterator(n) 的迭代器,那会更容易。

我怀疑我误解了STL的原理。谁能帮忙解释一下?

谢谢 蜜蜂乐队

最佳答案

您可以使用 advance()来自 <iterator> header :

<罢工> list<foo>::iterator iter = advance(someFooList.begin(), n);

list<foo>::iterator iter = someFooList.begin();

std::advance( iter, n);

如果迭代器支持随机访问(如 vector ),它将非常有效地工作,如果它只支持增加(或减少)迭代器,如 list , 它会起作用,但只能尽可能好。

关于c++ - STL 不提供通过索引返回迭代器的函数有什么原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067479/

相关文章:

c++ - 具有符合 STL 的常量迭代器的非常量引用类型?

python - 从列表创建迭代器对象后删除列表

JavaScript 迭代器类

c++ - 快速排序算法代码

c++ - Python 和动态扩展 C++ 类

c++ - 基本控制台打印程序

Java:为什么迭代器不可复制

c++ - 为什么不调用复制构造函数?

c++ - 如何使用 'auto' 关键字迭代 C++ STL 映射数据结构?

c++ - 从 STL 容器继承实现而不是委托(delegate)可以吗?