Lai*_*ith 3 c++ iterator forward-list
我知道std::forward_list<T>::iterator
没有复合赋值运算符(operator+=
).但那是为什么呢?
我问这个有三个原因:
operator++()
吗?std::advance()
做同样的事情?operator+=()
.使用:
std::advance(it, n);
Run Code Online (Sandbox Code Playgroud)
(在<iterator>
.中声明)
关键是复合赋值运算符仅在运算具有O(1)成本时提供.由于递增前向迭代器具有线性成本,因此最好将其显式化.
如果您想要一个重复增量结果的新值,请使用:
auto it2 = std::next(it1, n);
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么?
好的前进迭代器一次只能向前推进一个单元. +=
通常用于一次超过一个单位.
这个运算符不会推进"前进"迭代器
operator++()
吗?
它会,但你可以使用它iterator += 10
,这会让你相信它会立即前进10个位置.相反,它必须是10个单独的++
呼叫.
是不是有帮助函数std :: advance()做同样的事情?
是的,但它明确指出它是多次++
调用,除非您使用随机迭代器.
我正在实现我自己的前向列表(用于学习),我想知道operator + =()有什么问题
您的迭代器应符合前向迭代器的标准定义.