📜  C++ 中的 std::next 与 std::advance(1)

📅  最后修改于: 2023-12-03 15:13:58.552000             🧑  作者: Mango

C++ 中的 std::next 与 std::advance

在 C++ STL 中,我们可以通过 std::nextstd::advance 函数来实现对迭代器的操作。这两个函数的主要作用是在迭代器中进行前进和后退。

std::next

std::next 函数接受两个参数:一个迭代器和一个整数 n。当 n 为正数时,std::next 会返回迭代器向前移动 n 个位置后的结果;当 n 为负数时,std::next 会返回迭代器向后移动 -n 个位置后的结果。

下面是一个示例代码:

#include <iostream>
#include <vector>
#include <iterator>
 
int main() {
    std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    auto it = std::next(v.begin(), 5);
    std::cout << *it << '\n';
}

在上面的代码中,我们使用 std::next 函数将 v.begin() 迭代器向前移动 5 个位置,并将结果迭代器 it 指向第 5 个元素,即5

std::advance

std::advance 函数与 std::next 函数类似,也接受两个参数:一个迭代器和一个整数 n,但它没有返回值,而是将迭代器向前或向后移动 n 个位置。

下面是一个示例代码:

#include <iostream>
#include <vector>
#include <iterator>
 
int main() {
    std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    auto it = v.begin();
    std::advance(it, 5);
    std::cout << *it << '\n';
}

在上面的代码中,我们使用 std::advance 函数将 v.begin() 迭代器向前移动 5 个位置,并将结果迭代器 it 指向第 5 个元素,即5

总结

std::next 函数和 std::advance 函数都能实现对迭代器的操作,但它们的实现方式不同。std::next 函数是通过计算迭代器与整数之间的距离来实现的,而 std::advance 函数则是通过修改迭代器本身来实现的。一般来说,如果我们只需要访问迭代器所指向的元素,那么可以使用 std::next 函数;如果我们需要在迭代器中进行修改,那么需要使用 std::advance 函数。