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::next和std::prev:用于获取新的迭代器,不修改原始迭代器。
std::advance:直接修改原始迭代器,不返回新的迭代器。

菜鸟笔记