我知道我们可以使用 advance()
函数来增加迭代器。我们还使用 iterator++
将迭代器增加一位。为什么我们不能使用 it+=2
?
int main()
{
list<int> l1{1, 2, 3, 5, 6};
list<int> l2{2, 6, 8};
auto it = l1.begin();
advance(it, 2); //works
it++; //works
// it+=2; //not work
l2.splice(l2.begin(), l1, it);
for(int a: l2) cout<<a<<" ";
cout<<endl;
return 0;
}
你可以运行上面的代码here .
最佳答案
operator +=
仅受 RandomAccessIterator 支持;请注意,它应该具有恒定的复杂性。
std::list
的迭代器是 BidirectionalIterator ,不支持 operator +=
。 (std::vector
和std::array
的迭代器是RandomAccessIterator。)
请注意,它们都可以与 std::advance 一起使用, 当用于 RandomAccessIterator 时,复杂度是常数;当用于其他 InputIterators(包括 BidirectionalIterator)时,复杂度是线性的。这意味着使用 std::advance
是个好主意,因为它更通用,可以自动利用 RandomAccessIterator 的优势。
关于c++ - 我们可以在没有 'advance' 函数的情况下增加迭代器多个位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53002491/