关于C++ STL 中advance()、 distance() 、begin()、end()、prev()、next() 函数的使用

本文详细介绍了C++ STL中迭代器的相关操作,包括advance()函数用于前进或后退迭代器、distance()函数计算迭代器间元素数量、begin()和end()获取容器首尾迭代器,以及prev()和next()获取迭代器两侧的迭代器。这些函数在处理容器元素时非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、advance():用于将迭代器前进(或者后退)指定长度的距离

#include <iostream>     // std::cout
#include <iterator>     // std::advance
#include <vector>
using namespace std;
int main() {
    //创建一个 vector 容器
    vector<int> myvector{1,2,3,4};
    //it为随机访问迭代器,其指向 myvector 容器中第一个元素
    vector<int>::iterator it = myvector.begin();
    //借助 advance() 函数将 it 迭代器前进 2 个位置
    advance(it, 2);
    cout << "1、*it = " << *it << endl;

    //继续使用it,其指向 myvector 容器中最后一个元素之后的位置
    it = myvector.end();
    //借助 advance() 函数将 it 迭代器后退 3 个位置
    advance(it, -3);
    cout << "2、*it = " << *it;
    return 0;
}

2、 distance():用于计算两个迭代器表示的范围内包含元素的个数

#include <iostream>     // std::cout
#include <iterator>     // std::distance
#include <list>         // std::list
using namespace std;

int main() {
    //创建一个空 list 容器
    list<int> mylist;
    //向空 list 容器中添加元素 0~9
    for (int i = 0; i < 10; i++) {
        mylist.push_back(i);
    }
    //指定 2 个双向迭代器,用于执行某个区间
    list<int>::iterator first = mylist.begin();//指向元素 0
    list<int>::iterator last = mylist.end();//指向元素 9 之后的位置
    //获取 [first,last) 范围内包含元素的个数
    cout << "distance() = " << distance(first, last);
    return 0;
}

3、begin()/end():得到某个序列的首、尾迭代器

(1)传入参数为容器

#include <iostream>     // std::cout
#include <vector>       // std::vector, std::begin, std::end
using namespace std;
int main() {
    //创建并初始化 vector 容器
    std::vector<int> myvector{ 1,2,3,4,5 };
    //调用 begin() 和 end() 函数遍历 myvector 容器
    for (auto it = begin(myvector); it != end(myvector); ++it)
        cout << *it << ' ';
    return 0;
}

(2)传入参数为数组

#include <iostream>     // std::cout
#include <vector>       // std::vector, std::begin, std::end
using namespace std;
int main() {
    //定义一个普通数组
    int arr[] = { 1,2,3,4,5 };
    //创建一个空 vector 容器
    vector<int> myvector;
    //将数组中的元素添加到 myvector 容器中存储
    for (int *it = begin(arr); it != end(arr); ++it)
        myvector.push_back(*it);
    //输出 myvector 容器中存储的元素
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << *it << ' ';
    return 0;
}

4、prev():用来获取一个距离指定迭代器 n 个元素的迭代器

#include <iostream>     // std::cout
#include <iterator>     // std::next
#include <list>         // std::list
using namespace std;
int main() {
    //创建并初始化一个 list 容器
    std::list<int> mylist{ 1,2,3,4,5 };
    std::list<int>::iterator it = mylist.end();
    //获取一个距离 it 迭代器 2 个元素的迭代器,由于 2 为正数,newit 位于 it 左侧
    auto newit = prev(it, 2);
    cout << "prev(it, 2) = " << *newit << endl;
   
    //n为负数,newit 位于 it 右侧
    it = mylist.begin();
    newit = prev(it, -2);
    cout << "prev(it, -2) = " << *newit;
    return 0;
}

5、next():用来获取一个距离指定迭代器 n 个元素的迭代器

#include <iostream>     // std::cout
#include <iterator>     // std::next
#include <list>         // std::list
using namespace std;
int main() {
    //创建并初始化一个 list 容器
    std::list<int> mylist{ 1,2,3,4,5 };
    std::list<int>::iterator it = mylist.begin();
    //获取一个距离 it 迭代器 2 个元素的迭代器,由于 2 为正数,newit 位于 it 右侧
    auto newit = next(it, 2);
    cout << "next(it, 2) = " << *newit << endl;
   
    //n为负数,newit 位于 it 左侧
    it = mylist.end();
    newit = next(it, -2);
    cout << "next(it, -2) = " << *newit;
    return 0;
}

prev()和next()都是获取某个位置上的迭代器,区别是,当参数为正数时,prev()是将迭代器向前移动,获取左侧的迭代器;而对应next(),当参数为正数时,是将迭代器向后移动,获取右侧的迭代器。起始迭代器位置为第一个参数。

参考链接:

C++ STL advance()函数用法详解
C++ STL distance()函数用法详解(一看就懂)
C++ STL begin()和end()函数用法
C++ STL prev()和next()函数用法详解

谢谢阅读。

在++中,与迭代器密切相关的STL函数有很多。这些函数允许我们在容器中进行迭代和操作,提供了方便且高效的方法来处理容器中的元素。以下是一些与迭代器密切相关的常用std函数: 1. `std::begin` 和 `std::end`:这两个函数用于获取容器的起始迭代器和结束迭代器。例如,`std::begin(container)` 返回容器 `container` 的起始迭代器,`std::end(container)` 返回容器的结束迭代器。 2. `std::advance`:该函数用于将迭代器向前或向后移动指定的距离。例如,`std::advance(it, n)` 将迭代器 `it` 向前移动 `n` 个位置。 3. `std::distance`:该函数用于计算两个迭代器之间的距离。例如,`std::distance(first, last)` 返回从迭代器 `first` 到迭代器 `last` 之间的元素数量。 4. `std::next` 和 `std::prev`:这两个函数用于获取给定迭代器的下一个或上一个迭代器。例如,`std::next(it)` 返回 `it` 的下一个迭代器,`std::prev(it)` 返回 `it` 的上一个迭代器。 5. `std::advance` 和 `std::distance`:这两个函数通常结合使用,用于在迭代器范围内进行迭代。例如,`std::advance(first, n)` 可以将迭代器 `first` 向前移动 `n` 个位置,而 `std::distance(first, last)` 可以计算从迭代器 `first` 到迭代器 `last` 之间的元素数量。 6. `std::copy`:该函数用于将一个容器的元素复制到另一个容器中。它接受两个迭代器参数,表示源容器中要复制的范围,以及目标容器的起始位置。 7. `std::find`:该函数用于在容器中查找指定的值,并返回找到的第一个匹配元素的迭代器。 8. `std::sort`:该函数用于对容器中的元素进行排序。它接受两个迭代器参数,表示排序的范围。 9. `std::reverse`:该函数用于反转容器中元素的顺序。它接受两个迭代器参数,表示反转操作的范围。 这些只是一些常用的与迭代器密切相关的std函数STL还提供了更多用于处理容器的函数和算法。使用这些函数,我们可以方便地遍历、操作和处理容器中的元素,提高代码的效率和可读性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值