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

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()函数用法详解

谢谢阅读。

猜你喜欢

转载自blog.csdn.net/weixin_43869898/article/details/109102194
今日推荐