迭代器中reduce和reduce的区别

The difference between reduce and decrease in iterator

本文关键字:reduce 区别 迭代器      更新时间:2023-10-16

代码如下:

list<const char *> lst_city = {"NewYork", "Tokoyo", "ShenZhen"};
vector<string> vs_city;
vs_city.assign(lst_city.cbegin(), --lst_city.cend()); 

这是正确的。但如果我这样做,将是错误的:

vs_city.assign(lst_city.cbegin(), lst_city.cend() - 1);

——和——的区别是什么? 1,我不太清楚。如果它是一个向量,它也会很好。所以这仅仅是因为双边名单?

std::vector的迭代器是随机访问迭代器——它们可以与+-进行任意偏移,而1只是一个特定的偏移量。

std::list的迭代器不能这样做:它们只是双向迭代器,一次只能对一个元素进行自增(++)和自减(--)操作。

你可以根据迭代器的能力,使用std::advance的任意方法来编写移动任意迭代器的代码。

在您的情况下,即非常常见的单个元素的移位,您可以使用std::prevstd::next

链表不能在固定时间内跳转到任意元素。要在索引处查找元素,必须一个接一个地跟踪节点之间的链接。

由于任意跳转不是O(1)操作,因此将其作为列表迭代器的基本操作提供会产生误导,并导致程序员意外编写出非常低效的算法。因此,操作it - n不存在。

编译器无法区分it - 1和n的其他值,因此该操作也被禁止。剩下的就是使用自减运算符。

另一方面,Vector迭代器可以在常量时间内任意跳转。