gpt4 book ai didi

c++ - 如何将 std::::reverse_iterator 与运算符 + 一起使用?

转载 作者:行者123 更新时间:2023-11-30 00:50:03 25 4
gpt4 key购买 nike

我试过这个:

#include <iterator>
#include <list>
int main()
{
std::list<int> list(200);
std::list<int>::reverse_iterator it = list.rbegin() + 100;
}

编译时,它提示说:

 error: no operator "-" matches these operands
operand types are: const std::_List_iterator<int> - std::ptrdiff_t
balabalabalabalabalabalabalabalabalabalabalabala...

我在 std::vector 上尝试了相同的代码,效果很好。我的问题是如何使用 std::<list>::reverse_iteratoroperator +

最佳答案

std::list 没有随机访问迭代器。这意味着您不能将它们增加任意数量。您可以做的是使用 ++ 运算符中的任何一个来增加它们:

std::list<int>::reverse_iterator it = list.rbegin()++;

std::list<int>::reverse_iterator it = ++(list.rbegin());

您也可以使用 std::advancestd::next执行多个步骤,但在内部,这些将一步一步执行。遍历列表是一个 O(N) 操作。

例如,

std::list<int>::reverse_iterator it = std::next(list.rbegin(), 100);

std::list<int>::reverse_iterator it = list.rbegin();
std::advance(it, 100);

在这两种情况下,++ 都会被应用 100 次。因此,如果您需要经常这样做,最好使用 std::vector 而不是 std::list,因为这些操作对于 vector 来说是 O(1) .事实上,您应该有充分的理由使用 choose list 而不是 vector。这很少是一个好的选择。

关于c++ - 如何将 std::<list>::reverse_iterator 与运算符 + 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26312915/

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