菜鸟笔记
提升您的技术认知

std::next、std::prev、std::advance迭代器使用

1. std::next

在 C++ 中,std::next函数用于获取迭代器指向的下一个位置的迭代器。默认情况下,std::next的步进是正数,即向前移动。如果使用负数步进,即向后移动。

#include <iostream>
#include <vector>
#include <iterator>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin()+2; // 指向第三个元素 3 

    // 使用 std::next 步进为 1
    auto next_it1 = std::next(it, 1);
    auto next_it2 = std::next(it, -1);
    std::cout << "Next element: " << *next_it1 << std::endl;
    std::cout << "previous element: " << *next_it2 << std::endl;

    return 0;
}

运行结果:

Next element: 4
previous element: 2

2. std::prev

std::prev是 C++ 标准库中的一个函数,用于获取迭代器指向的前一个位置的迭代器。它与std::next类似,但方向相反,即用于向后移动迭代器。如果使用负数步进,即向前移动。

#include <iostream>
#include <vector>
#include <iterator>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin()+2; // 指向第三个元素 3 

    // 使用 std::next 步进为 1
    auto prev_it1 = std::prev(it, 1);
    auto prev_it2 = std::prev(it, -1);
    std::cout << "previous element: " << *prev_it1 << std::endl;
    std::cout << "Next element: " << *prev_it2 << std::endl;

    return 0;
}

运行结果:

previous element: 2
Next element: 4

3. std::advance

std::advance,可以直接修改迭代器的位置,而不需要返回新的迭代器。

#include <iostream>
#include <vector>
#include <iterator>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin();  // 从起始位置开始

    // 使用 std::advance 向前移动迭代器
    std::advance(it, 3);
    std::cout << "Element after advancing forward: " << *it << std::endl;  // 输出 4

    // 使用 std::advance 向后移动迭代器
    std::advance(it, -2);
    std::cout << "Element after advancing backward: " << *it << std::endl;  // 输出 2

    return 0;
}

运行结果:

Element after advancing forward: 4
Element after advancing backward: 2

总结

std::nextstd::prev:用于获取新的迭代器,不修改原始迭代器。

std::advance:直接修改原始迭代器,不返回新的迭代器。