迭代器中reduce和reduce的区别
The difference between reduce and decrease in iterator
代码如下:
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::prev
和std::next
。
链表不能在固定时间内跳转到任意元素。要在索引处查找元素,必须一个接一个地跟踪节点之间的链接。
由于任意跳转不是O(1)操作,因此将其作为列表迭代器的基本操作提供会产生误导,并导致程序员意外编写出非常低效的算法。因此,操作it - n
不存在。
编译器无法区分it - 1
和n的其他值,因此该操作也被禁止。剩下的就是使用自减运算符。
另一方面,Vector迭代器可以在常量时间内任意跳转。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 返回递归调用和仅递归调用的区别
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- 为什么 std::reduce 需要交换性?
- 迭代器中reduce和reduce的区别