C语言到C++STL菜鸟教程:Vector容器、迭代器、常用接口

2022-07-1712:41:42编程语言入门到精通Comments1,660 views1字数 2535阅读模式

1. 概念文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

Vector可以翻译为向量,或向量数组,至于为什么以向量命名,可以理解为一维空间也是存在向量的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

Vector是最简单的序列是容器,就像数组一样,向量使用连续的存储位置作为元素,这意味着它们的元素也可以使用常量指向其元素的偏移来访问,与数组一样有效。但与数组不同,它们的大小可以动态变化,其存储由容器自动处理。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

总结一下Vector就是一个动态创建空间,且预先加载了常用的数组操作的数组。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

2. 相关文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

头文件:#include <vector>文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

3. 初始化文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

格式为:vector<Data_Types> name;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

我们以Int类型作为参数为例,进行创建。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

vector<int> v1;          //创建一个空的向量v1
vector<int> v2(10);      //创建一个向量v2,其已开辟10个元素的空间,相当于int v[10];
vector<int> v3(10,5);    //创建一个向量v3,其已开辟10个元素的空间并全部赋值为5
vector<int> v4(v3.begin(),v3.end());    //创建一个向量v3,其内容为向量v3的内容
vector<int> v5(v4);      //创建一个向量v5,其包含了v4的全部内容

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

4. 迭代器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

顾名思义,迭代器是一种安全的访问控制器,它本身是一种指针,用于直接的元素访问。其遍历访问的大致思路是,创建容器的迭代器,让迭代器指向第一个元素,逐步向后移动并最终指向最后一个元素结束。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

遍历代码举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

vector<int> v;       //创建一个向量vs
vector<int>::iterator it;   //C98标准
for(it=v.begin();it!=v.end();it++){
    cout<<*it<<' ';
}

当然,遍历也可以直接使用下标访问:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

 for(int i=0;i<v.size();i++){
        cout<<v[i]<<' ';
    }

请根据自己的使用习惯进行合理的安排,对于新手而言会更倾向于选择后者。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

5.常用接口(常用的)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

Vector的接口有非常多,不同的C++语言标准也不同,这里只提供一些常用的进行简介,具体的使用可以翻阅官方文档(英文),或是别人的翻译稿。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

我们使用 vector<int> v; 预先创建了一个向量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

a) 向量尾插入push_back()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

在向量的末尾添加一个新元素val,并自动让容器大小增大一个。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

void push_back (const value_type& val);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

1
v.push_back(10);  //插入一个数据10

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

b) 向量尾删除pop_back()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

移除向量尾的最后一个元素,并且将容器大小减小一个,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:void pop_back();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

v.pop_back();

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

c) 插入insert()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

插入元素到指定位置,通过在元素之前在指定位置插入新元素来扩展向量,从而有效地增加容器大小所插入的元素数量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

插入单一数据到指定位置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

iterator insert (iterator position, const value_type& val);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

插入一段数据到指定位置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

void insert (iterator position, size_type n, const value_type& val);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

插入一段别的容器的数据到指定位置:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

template <class InputIterator>文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

void insert (iterator position, InputIterator first, InputIterator last);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

 v.insert(v.begin(),10);     //在向量最前端插入数据10
 v.insert(v.begin(),5,20);   //在向量最前端插入5个数据20
 
 vector<int> k(2,50);   //创建一个新的向量k,其拥有2个元素内容均为50
 v.insert(v.begin(),k.begin(),k.end());  //在向量v最前端插入向量K的全部内容

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

d) 删除erase()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

删除一个元素,或者是一段区间的元素,将会自动缩减空间使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

iterator erase (iterator position);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

iterator erase (iterator first, iterator last);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

v.erase(v.begin());     //删除第一个元素
v.erase(v.begin(),v.begin()+4); //删除从第一个开始后4个元素(包括第一个)

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

e) 清空clear()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

将向量中所有元素清空。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

void clear();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

v.clear();      //清空向量

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

f) 数据大小size()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

返回向量中的数据元素个数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

size_type size() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

 cout<<v.size()<<endl;   //输出5

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

g)已开辟最大宽度capacity()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

返回向量最大已开辟的空间大小。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

size_type capacity() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

vector<int> v(3,10);    //创建默认有3个值为10的元素的向量v
v.insert(v.begin(),10,20);   //在向量最前端插入10个值为20的数据
v.erase(v.begin(),v.begin()+4); //删除从第一个开始后4个元素(包括第一个)
cout<<v.capacity()<<endl;   //输出13

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

h)*最大支持空间max_size()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

返回计算机支持开辟vector的最大空间值,一般来说和计算机内存和CPU相关,是一个极大的数据,而且不同计算机中可能有不同的值文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

size_type max_size() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

使用举例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html

vector<int> v(5,10);    //创建默认有5个值为10的元素的向量v
cout<<v.max_size()<<endl;   //输出4611686018427387903
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25118.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/25118.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定