gpt4 book ai didi

c++ - 为什么只有 random-access-iterator 在 C++ 中实现 operator+?

转载 作者:可可西里 更新时间:2023-11-01 16:24:15 27 4
gpt4 key购买 nike

我想为 STL list 迭代器获取 far next 值,但它没有实现 operator+,不过 vector 有它。为什么以及如何获得我想要的值(value)?

我想如果我多次调用 operator++ 就可以做到这一点,但这不是有点脏吗?

我想做的是:

list<int> l;
...omitted...
list<int>::iterator itr = l.begin() + 3; // but, list iterator does not have
// operator+

什么是我想要的最佳解决方案?

最佳答案

您想使用 std::advance :

list<int>::iterator itr = l.begin();
std::advance(itr, 3);
如果迭代器是随机访问,

advance 将使用 operator+ 并在常数时间内完成,而它将在 operator++ 上循环并在线性时间内完成如果迭代器不是随机访问。

这样做的原因是让您可以控制复杂性要求。如果您关心操作的复杂性,您可以使用 operator+ 并获得常数时间,但这只能使用随机访问迭代器进行编译。如果您不关心复杂性,您可以使用 std::advance,它始终有效,但复杂性会因迭代器而异。

关于c++ - 为什么只有 random-access-iterator 在 C++ 中实现 operator+?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com