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
暂无评论内容