迭代器与vector向量容器的用法

迭代器与vector向量容器的用法

迭代器

实际上,能够 遍历 一个 容器 的 工具 都可以称作是 迭代器。
分为正向迭代器和反向迭代器。

使用方法:

正向迭代器
容器类型<变量类型>::iterator 迭代器名;
例如:vector<int>::iterator p;
p 就是储存 int 类型数据的 vector 容器的迭代器。

反向迭代器,定义方法如下:
容器类名::reverse_iterator  迭代器名;

迭代器实质上是指针,也就是指向的数据的地址,因此会有【迭代器地址】的概念。
但是这个迭代器是有储存类型的,因此并不与普通的“指针变量”完全通用,只能说“形式上类似”,“实质上相同”
迭代器的遍历通常是这个样子的:
for (p = v.begin(); p != v.end(); p++) cout << *p << ’ ';
可以看到迭代器指向的元素是与指针类似,可以使用 “++” 自增运算符。迭代器可以使用 p++/p–,也可以使用++p/–p,++p的效率更高。

vector向量容器

向量容器的声明需要头文件

#include<vector>

你可以将 vector 容器理解为一个高级的数组,与数组一样能够通过下标来随机存取,但并不需要提前声明容器容量,也有很多便利的 方法 来对容器内部的元素进行操作。

vector<T> v;                    // T 是容器内元素的变量类型
vector<int> v;                  //声明一个空的 vector 容器 v ,其内部元素的数据类型是 int
vector<double> v(6);            //声明一个储存 double 型数据的 vector 容器,让它具有 6 的初始容量,下标是 0~5 初始值是 0.0
vector<double> v(8, 2.33);      //定义一个 v ,容量是 8 ,每个元素的值是2.33

vector容器的常用方法

v.push_back(e);                 //从容器末端追加一个元素,容器末端自动扩张
v.begin();                      //返回向量容器的首地址,也就是第一个元素的迭代器地址
v.end();                        //返回向量容器的尾地址,注意尾地址是最后一个元素的下一个位置的迭代器地址
v.insert(v.begin() + n, e);     //往指定地址的位置插入一个元素,如例:在 n 号元素**前**插入num
v.erase(v.begin()+n,v.begin()+(n+2));              //删除一个元素,或删除一段元素(n到n+2),p 为迭代器地址
v.size()                        //返回 v 的大小(元素个数)
v.empty()                       //如果容器为空,返回“真”,如果不为空,返回“假”
v.clear()                       //清空容器内容

vector 向量容器的操作和遍历

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
    vector<int> v;
    //尾部添加元素
    v.push_back(2);
    v.push_back(4);
    v.push_back(6);
    vector<int>::iterator iter;//生成相应容器的迭代器
    //遍历出容器内的元素
    for(iter=v.begin();iter!=v.end();++iter)
    cout<<*iter<<" ";
    cout<<endl;
    cout<<"v.size()="<<v.size()<<endl;//容器内元素的个数
    v.clear();//将容器清零
    cout<<"v.size()="<<v.size()<<endl;
    //循环添加元素
    for(int i=1;i<=9;++i)
    v.push_back(i);
    
    //在三号元素前添加666
    v.insert(v.begin()+3,666);
    for(iter=v.begin();iter!=v.end();++iter)
    cout<<*iter<<" ";
    cout<<endl;
    cout<<"v.size()="<<v.size()<<endl;
    
    //删除5号元素
    v.erase(v.begin()+5);
    for(iter=v.begin();iter!=v.end();++iter)
    cout<<*iter<<' ';
    cout<<endl;
    
    //删除四号到七号之间的元素(注意它删除时是左闭右开,即会删除四号元素)
   /* v.erase(v.begin()+4,v.begin()+7);
    for(iter=v.begin();iter!=v.end();++iter)
    cout<<*iter<<' ';
    cout<<endl;*/
    v.erase(v.begin()+5,v.begin()+7);
    for(iter=v.begin();iter!=v.end();++iter)
    cout<<*iter<<' ';
    cout<<endl;
    
    //测试一下empty()
    if(v.empty())
    cout<<"空"<<endl;
    else
    cout<<"非空"<<endl;
    v.clear();
    if(v.empty())
    cout<<"空"<<endl;
    else
    cout<<"非空"<<endl;


}


结果展示:
2 4 6
v.size()=3
v.size()=0
1 2 3 666 4 5 6 7 8 9
v.size()=10
1 2 3 666 4 6 7 8 9
1 2 366 4 8 9
非空
空

有待补充!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值