迭代器按照定义分类:
正向迭代器: 容器类名::iterator 迭代器名; 依次向下遍历
反向迭代器: 容器类名::reverse_iterator 迭代器名; 依次向上遍历
常量正向迭代器: 容器类名::const_iterator 迭代器名;
常量反向迭代器: 容器类名::const_reverse_iterator 迭代器名;-------------------------------------------------------------------------------------------------------------------------
迭代器按照功能分类:
正向迭代器,支持相互赋值、比较、自加、取内容等
双向迭代器,具有正向迭代器全部功能,支持自减
随机访问寄存器,具有双向迭代器的全部功能
不同容器的迭代器的功能:
随机访问寄存器 vector、deque
双向寄存器 list、set /multiset、map /multimap
不支持迭代器寄存器 stack、queue、priority_queue
- v.end():
- 指向向量最后一个元素之后的元素,一般用于正向迭代器
- v.rend():
- 指向向量第一个元素之前的元素,一般用于反向迭代器
- v.begin():
- 返回一个指向向量第一个元素的迭代器,用于正向输出动态数组中的元素
- v.rbegin():
- 返回一个指向向量最后一个元素的反向迭代器,用于逆向输出动态数组中的元素
- v.front():
- 引用容器的第一个元素
- v.assign(first,last):
- 新值替换旧值,定义了范围,first与last之间被替代
- v.assign(n,val):
- 给指定容器v分配了n次val值,从容器头开始替代
- v.erase(pos):
- 删除迭代器指向pos位置的指定元素
- v.erase(first,last):
- 删除容器first与last之间的内容
- v.emplace(pos,val):
- 在容器的pos位置处插入一个新元素val
- v.capacity():
- 返回容器大小
- v1.crbegin():
- 同rbegin(),只是适用于常量迭代器,不能被修改
- v1.crend()、v1.cend()、v1.cbegin()类似
- v.clear():
- 清空容器
- v.hypot():
- 返回两个数的平方和的平方根
- v.push_back(val):
- 在容器末尾插入val
- v.pop_back():
- 删除容器末尾的元素
- v.insert(pos,val):
- 在pos处插入元素val
- v.insert(pos,n,val):
- 在pos处连续插入n次元素val
- v.insert(pos,first,last):
- 在pos处连续插入first-last之间的内容,可用于容器拼接
- v.swap(v1):
- 交换容器 v 和 v1 里面的内容
- v.resize(n):
- 重置容器大小,一般是用于缩小容器容量
- v.resize(n,val):
- 重置容器大小,一般用于扩大容器容量,并将无元素的位置插入val值
- v.data():
- 返回一个指向向量内部用于存储其元素的数组的指针
其余方法和list很多相似,详见请看: C++之链表list的方法总结_承诺$枷锁的博客-CSDN博客
- #include
- #include
- #include
- using namespace std;
- int main()
- {
- //定义动态数组
- vector
v{"hello","vector","string"}; //vector v(100); - //定义正向迭代器
- vector
::iterator it; - //定义反向迭代器
- vector
::reverse_iterator rit; - for(it=v.begin();it!=v.end();++it){
- cout<<*it<<" "; //结果:hello vector string
- }
- cout<
- for(rit=v.rbegin();rit!=v.rend();++rit){
- cout<<*rit<<" "; //string vector hello
- }
- cout<
- string str ("this string erase.");
- str.erase(4,7); //删除字符串str中从下标为4开始连续删除7个
- cout<
//this erase. - //删除动态数组中首元素,并打印删除后迭代器的指向
- cout<<*(v.erase(v.begin()))<
//vector,这里无循环,所以只打印现有的首地址元素 - //删除字符串里面下文两者之间的内容
- str.erase(str.begin()+5,str.end()-6);
- cout<
//this erase. -
- //引用容器第一个元素
- cout<
front()<//vector - //引用容器最后一个元素
- cout<
back()<//string -
- vector
v1; - cout<<"================="<
- //将容器 v 中的数据全部赋给容器 v1
- v1.assign(v.begin(),v.end());
- for(int i=0;i
size();i++) - cout<
" "; //vector string - cout<
- cout<<"================="<
- //将容器 v1中的数据从头开始的 n 个元素被替代成 c
- v1.assign(1,"c");
- for(int i=0;i
size();i++) - cout<
" "; //c string - cout<
- cout<<"================="<
- for(int i=0;i
size();i++) - cout<
" "; //容器v的元素:vector string - cout<
- //在容器 v的首位置处插入 hello
- v.emplace(v.begin(),"hello");
- for(int i=0;i
size();i++) - cout<
" "; //容器v的元素:hello vector string - cout<
- //返回容器的容量
- cout<<"容器v的容量为:"<
capacity()<//3 - cout<<"================="<
- vector<int> cv{1,2,3};
- //同rbegin(),只是适用于常量迭代器,不能被修改
- //v1.crend()、v1.cend()、v1.cbegin()类似
- vector<int>::const_reverse_iterator crit=cv.crbegin(); //常量反向迭代器
- // *crit=5;//assignment of read-only location
- cout<<*crit<
//不能被修改,所以报错 - //清除容器cv内的内容
- cv.clear(); //清除常量cv内的内容
- cout<<"-------------------"<
- for(int i=0;i
size();i++) - cout<
//所以这里东西没有显示 - cout<<"================="<
- int i=2,j=3,z=4;
- cout<<"2,3的平方和的平方跟:"<<hypot(i,j)<
//cmath头文件 - cout<<"================="<
- for(int i=0;i
size();i++) - cout<
" "; //打印容器v中的所有元素:hello vector string - cout<
- //元素 push_back 进栈
- v.push_back("push_back");
- for(int i=0;i
size();i++) - cout<
" "; //打印容器v中的所有元素:hello vector string push_back - cout<
- //出栈
- v.pop_back();
- for(int i=0;i
size();i++) - cout<
" "; //打印容器v中的所有元素:hello vector string - cout<
- //在容器末尾插入 insert
- v.insert(v.end(),"insert");
- //在容器头连续插入两次 two
- v.insert(v.begin(),2,"two");
- for(int i=0;i
size();++i) - cout<
" "; //打印容器v中的所有元素:two two hello vector string insert - cout<
- for(int i=0;i
size();++i) - cout<<"容器v1:"<
" "; //打印容器v1中的所有元素: 容器v1:c - cout<
- //将容器 v1 里面的内容追加到容器 v 中
- v.insert(v.end(),v1.begin(),v1.end());
- for(int i=0;i
size();i++) - cout<
" "; //打印容器v中的所有元素:two two hello vector string insert c - cout<
- //交换两个容器里面的内容
- v.swap(v1);
- cout<<"容器v:";
- for(int i=0;i
size();++i) - cout<
" "; //交换容器内容后打印容器 v 的内容: 容器v:c - cout<
- cout<<"容器v1:";
- for(int i=0;i
size();++i) - cout<
" "; //容器v1:two two hello vector string insert c - cout<
- //缩小容器 v1 的容量
- v1.resize(6);
- cout<<"容器v1:";
- for(int i=0;i
size();++i) - cout<
" "; //容器v1:two two hello vector string insert - cout<
- //扩大容器 v 的容量,并填充 hello
- v.resize(3,"hello");
- cout<<"容器v:";
- for(int i=0;i
size();++i) - cout<
" "; //容器v:c hello hello - cout<
- //返回一个指向容器 v 内部用于存储其元素的数组的指针
- string *p = v.data();
- for(int i=0;i
size();++i) - cout<<*p++<<" "; //c hello hello
- cout<
- }
v.erase():删除迭代器指向的指定元素
erase函数的原型如下:
1)string& erase(size_t pos = 0, size_t n = npos);
erase(pos,n); 删除从pos开始的n个字符
2)iterator erase(iterator position);
erase(position); 删除position处的一个元素
3)iterator erase(iterator first, iterator last);
erase(first,last); 删除从first到last之间的字符(first和last都是迭代器)
- string str ("this string erase.");
- str.erase(4,7);
- cout<
- //删除动态数组中首元素,并打印删除后迭代器的指向
- cout<<*(v.erase(v.begin()))<
- //删除字符串里面下文两者之间的内容
- str.erase(str.begin()+5,str.end()-6);
- cout<
- this erase.
- vector
- this erase.
v.assign():为向量分配新值并替换旧值
assign函数原型如下:
assign(Iterator first,Iterator last);给容器定义了范围,first与last之间被替代,可用于容器给容器赋值
举例:v.assign(first,last);
assign(size_type n,const value_type& val); 从容器v头部开始,替代n次val值
举例:v.assign(n,val);//次数,分配值
- vector
v1; - cout<<"================="<
- //将容器 v 中的数据全部赋给容器 v1
- v1.assign(v.begin(),v.end());
- for(int i=0;i
size();i++) - cout<
- cout<<"================="<
- //将容器 v1中的数据从头开始的 n 个元素被替代成 c
- v1.assign(1,"c");
- for(int i=0;i
size();i++) - cout<
- =================
- vector
- string
- =================
- c
- string
-
相关阅读:
JavaScript对象:我们真的需要模拟类吗?
IIC基本知识
苏州科技大学计算机考研资料汇总
多目标果蝇算法及其MATLAB实现
力扣每日一题60:排序序列
conda安装Tensorflow2.9的GPU版本
ai智能电话机器人如何撑起一个部门
如何设计对外接口
由浅入深,从掌握Promise的基本使用到手写Promise
在阿里做前端程序员,我是这样规划的
-
原文地址:https://blog.csdn.net/hold_the_key/article/details/126799998