STL迭代器的基础应用

csdn推荐

STL迭代器的应用

类型作用定义方式

正向迭代器

正序遍历STL容器

容器类名::iterator 迭代器名

常量正向迭代器

以只读方式正序遍历STL容器

容器类名::const_iterator 迭代器名

反向迭代器

逆序遍历STL容器

容器类名::reverse_iterator 迭代器名

常量反向迭代器

以只读方式逆序遍历STL容器

容器类名::const_reverse_iterator 迭代器名

迭代器与指针一样,支持算数运算。迭代器的算数运算具有方向性:在进行算数运算时,运算方向沿着迭代器的方向。

如正向迭代器进行++时,为沿着正向进行++,即移动到当前迭代器的下一个位置;反向迭代器进行++时,为沿着反向进行++,相对于正向而言,实际是移动到了当前的前一个位置。

获取迭代器的位置:使用std::distance(迭代器1,迭代器2),为迭代器2-迭代器1。

基于范围的for循环:C++11引入了基于范围的for循环,用于更简便的正序遍历容器(包括C数组),但不支持逆序遍历容器。在基于范围的for循环中,循环变量就是元素本身,无需再进行解引用操作。若需要在基于范围的for循环中对元素进行修改,可与引用进行配合使用。循环头的语法为:

for (auto element : container) {
    //element直接表示容器中的每一个元素,无需再进行解引用。container既可以为STL序列容器,也可以是C数组
}
for (auto &element : container) {
    //element表示容器中的每一个元素的引用,通过修改引用可直接修改容器内元素
}

迭代器应用实例

此处仅为说明迭代器作用而举例,实际上vector的I/O方法并不止这些。

一维vector的正序输入、正序输出

vector<int>v(10);
for(v::iterator i=v.begin();i!=v.end();i++)
    cin>>*i;//注意必须解引用迭代器,否则会报错。对迭代器指向的元素进行操作,元素实际值会改变
for(v::iterator i=v.begin();i!=v.end();i++) cout<<*i;

vector<int>v(10);
for(auto i=v.begin();i!=v.end();i++) cin>>*i;
for(auto i=v.begin();i!=v.end();i++) cout<<*i;

vector<int>v(10);
for(auto &i:v){
    cin>>i;
}
for(auto i:v){
    cout<<i;
}

int a[10];
for(auto &i:a){
    cin>>i;
}
for(auto i:a){
    cout<<i;
}

一维vector的逆序输入、逆序输出

vector<int>v(10);
for(v::iterator i=v.rbegin();i!=v.rend();i++)
    cin>>*i;//注意必须解引用迭代器,否则会报错。对迭代器指向的元素进行操作,元素实际值会改变
for(v::iterator i=v.rbegin();i!=v.rend();i++) cout<<*i;

vector<int>v(10);
for(auto i=v.rbegin();i!=v.rend();i++) cin>>*i;
for(auto i=v.rbegin();i!=v.rend();i++) cout<<*i;

二维vector的正序输入、正序输出

vector<vector<int>>v(3,vector<int>(3));
for(vector<vector<int>>::iterator j=v.begin();j!=v.end();j++)
    for(vector<int>::iterator i=j->begin();i!=j->end();i++)
        cin>>*i;
for(vector<vector<int>>::iterator j=v.begin();j!=v.end();j++)
    for(vector<int>::iterator i=j->begin();i!=j->end();i++)
        cout<<*i;

vector<vector<int>>v(3,vector<int>(3));
for(auto j=v.begin();j!=v.end();j++)
    for(auto i=j->begin();i!=j->end();i++)
        cin>>*i;
vector<vector<int>>v(3,vector<int>(3));
for(auto j=v.begin();j!=v.end();j++)
    for(auto i=j->begin();i!=j->end();i++)
        cout<<*i;

vector<vector<int>>v(3,vector<int>(3));
for(auto &j:v)
    for(auto &i:j)
        cin>>i;
for(auto j:v)
    for(auto i:v)
        cout<<i;

int a[3][3];
for(auto &j:a)
    for(auto &i:j)
        cin>>i;
for(auto &j:a)
    for(auto i:j)
        cout<<i;

文章来源:https://blog.csdn.net/Yerosius1/article/details/139904404



微信扫描下方的二维码阅读本文

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容