C++中的std::next 和 std::advance 区别
Std::advance和Std::next用于将迭代器向前移动一定的位置,这样就可以使迭代器指向想要的位置。虽然两者目的相同,但它们的实现却各不相同。这使得我们理解两者之间的区别变得很重要。在c++ 11中,std::next()默认会前进1,而std::advance()需要一个距离。
- 语法差异:std::advance和std::next的语法如下:
- 返回类型:std::advance不返回任何东西,而std::next在从给定的基本位置向前移动n个位置后返回一个迭代器。
- 在std::next()的语法中,它至少会将迭代器向前推进一个位置,即使我们没有指定它必须前进的位置,因为它有一个默认值1,而如果我们使用std::advance,它没有这样的默认实参。
示例
参数修改: std::advance修改它的参数,使其指向期望的位置,而std::next不修改它的参数,实际上它返回一个指向期望位置的新迭代器。
- 输出:
- 说明:可以看出,我们想让ii指向它所指向的位置的前面两个空格,因此如果使用std::advance ii将指向前面两个空格,而如果使用std::next,则ii不会被推进,但会返回一个指向新位置的迭代器,并将其存储在iii中。
让我们用表格的形式来看看它们的区别:
序号 | std::next | std::advance |
---|---|---|
1. | 它用于返回迭代器的第n个继承者 | 它没有任何返回类型。 |
2. | 它接受两个形参:元素的数量和一个迭代器。 | 它接受两个形参,元素个数和迭代器 |
3. | 它的时间复杂度在最好的情况下是恒定的 | 它的时间复杂度在最好的情况下是恒定的 |
4. | 它的时间复杂度在最坏情况下是线性的 | 它的时间复杂度在最坏情况下是线性的 |