来学STL(1)<vector>使用(持续更新)

系列文章目录


大vvvvvv

来学STL(1)<vector>使用初阶(持续更新)
按需求抓重点。收藏起来

说明

本文注重讲解常用的方法,偏方容易把我搞的云里雾里。
原创文章,未经允许禁止转载

vector容器的定义

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。(来自菜鸟教程)

我的理解,就是一个数组,不定长数组。就是这个数组长度不固定,按需求使用,就这么简单。

vector容器的简单代码使用(原始代码)

这个代码可以简单看一下vector的使用思路。详情请按需跳转

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	vector<int> v;//创建一个容器,也可以说是数组 
	v.push_back(0);// 如果当做数组理解 就是v[0]=0,就是加入0元素
	v.push_back(1);//v[1] = 1; 
	v.push_back(3);
	v.push_back(4);
	//让我们输出看一看吧 
	for(int i = 0;i<4;i++){
    
    
		cout<<v[i]<<endl; //加入元素虽然用push_back,但是取值遍历像数组一样使用 
	}
	return 0;
} 

运行结果

0
1
3
4

vector容器的构造与赋值遍历(申请一个vector容器)

构造方法最常用的就是原始代码 当然还有其他的。可以查看这篇文章
==>> 戳我直达
如果不明白 那么看下面代码(简化)

vector<int> v1();		//创造一个空v1,小括号爱要不要,看脸 
	vector<int> v2(10);		//这个就是直接申请了一个初始长度为10的数组,但是与普通数组不同的是它还可以加元素 
	vector<int> v3(10,0);	//申请空间为10,并把这10个空间初始化为0 还挺好用 
	vector<int> v4(v3);		//复制所有的元素 就是对v4赋值了,只不过赋值的是一个数组,STL的独特操作哈哈,也可以v3=v4。
	 
	vector<int> v5(v3.begin(),v3.begin()+5); // 将v3的开始到第五个元素复制到v5中。 
	 

赋值:
push_back()函数—我不太喜欢搬定义,掌握使用方法就好。
看这个名字很容易知道,它会在数组后面添加一个数(专业一点就是先申请一个空间,然后添加数)。
那么又有人会问,如果在中间添加一个数咋办。
inset()函数—插入一个数。可以在指定位置插入一个数
使用方法,一言不合就放代码
这里只介绍常用且方便的几种方法,因为麻烦的我晕。

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	vector<int> v;//创建一个容器,也可以说是数组 
	v.push_back(0);// 如果当做数组理解 就是v[0]=0,就是加入0元素
	v.push_back(1);//v[1] = 1; 
	v.push_back(3);
	v.push_back(4);
	//让我们输出看一看吧 
	for(int i = 0;i<4;i++){
    
    
		cout<<v[i]<<endl; //加入元素虽然用push_back,但是取值遍历可以像数组一样使用 
	}
	//inset(要插入元素的地址,插入元素的值) ; 
	
	v.insert(v.begin(),2);	 //在最前面插入2,也就是说 v[0]=2了。
	
	//v.begin()是数组的起始地址,v.end()是结尾地址。 
	
	for(int i = 0;i<5;i++){
    
     // 5?? 插入了一个元素,长度不就变5了。
		cout<<v[i]<<' ';
	}
	cout<<endl; 
	
	
	v.insert(v.begin()+2,5);	 //在第二个位置插入位置5,v[2]=5;
	
	for(int i = 0;i<6;i++) cout<<v[i]<<' ';
	cout<<endl; 
	return 0;
} 

运行结果

0
1
3
4
2 0 1 3 4
2 0 5 1 3 4

注意,inset是在地址层面操作,第一个参数是地址,第二个是你要插入的数。也就是如果要大量的插入,简单的办法是用迭代器(以后更新),总之就是你告诉这个函数–我要在什么----“地址”----的地方插入什么----“元素”----
我不喜欢inset,因为它代表插队(嘿嘿~~~).
遍历函数
遍历函数也就是当最简单的数组遍历就行,就是数组的用法,看原始代码的for循环就懂了。
还有一种迭代器遍历,知道迭代器就可以了。不细讲,如果需要的就评论。

vector容器的获取长度、删除与sort排序

1.获取长度
size()函数都可以获取容器(数组)的大小。
很好理解,直接看代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	vector<int> v;//创建一个容器,也可以说是数组 
	v.push_back(0);// 如果当做数组理解 就是v[0]=0,就是加入0元素
	v.push_back(1);//v[1] = 1; 
	v.push_back(3);
	v.push_back(4);
	//让我们输出看一看吧 
	for(int i = 0;i<4;i++){
    
    
		cout<<v[i]<<endl; //加入元素虽然用push_back,但是取值遍历可以像数组一样使用 
	}
	//把上面的4改成length() 意味着 size()=4 
	for(int i = 0;i<size();i++){
    
    
		cout<<v[i]<<endl;
	}
	return 0;
}

运行结果:

0
1
3
4
0
1
3
4
v.size() = 4

2.删除
1.删除整个容器 :clear()函数。直接清空vector里面的数,注意,他不会把房间退了,就是不会释放空间,如果释放空间,可以用swap(),知道就好,用的不多,详细看代码

	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	cout<<v.size()<<endl;
	v.clear();
	cout<<v.size()<<endl;
	vector<int>().swap(v); //知道就好,用的不多,
	//因为clear()之后size就在0,
	//所以只用个clear就可以以为是清空了
	cout<<v.size()<<endl;

运行结果

2
0
0

*2.删除某个元素:*有插队用的inset(),也会有踢出(删除)某个元素的函数
erase()函数,删除某个元素。

erase的函数原型有两种形式:
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
第一个是删除单个位置的元素,也就是说—“给我删掉这个元素”
第二个是删除连续位置的元素,也就是说—“给我删掉从first到last的元素”

不难理解,上代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	vector<int> v;//创建一个容器,也可以说是数组 
	v.push_back(0);// 如果当做数组理解 就是v[0]=0,就是加入0元素
	v.push_back(1);//v[1] = 1; 
	v.push_back(3);
	v.push_back(4);
	//让我们输出看一看吧 
	for(int i = 0;i<4;i++){
    
    
		cout<<v[i]<<endl; //加入元素虽然用push_back,但是取值遍历可以像数组一样使用 
	}
	v.erase(v.begin()); //v[0]的元素
	
	for(int i = 0;i<v.size();i++) cout<<v[i]<<' ';
	
	cout<<endl; 
	
	v.erase(v.begin(),v.begin()+2);//删除v[0]到v[2]的函数
	
	 for(int i = 0;i<v.size();i++) cout<<v[i]<<' ';
	 
	 cout<<endl;
	 
	cout<<"v.size() = "<<v.size()<<endl;
	
	v.erase(v.begin(),v.end()); //删除所有元素
	
	cout<<"v.size() = "<<v.size()<<endl;
	return 0;
} 

运行结果

0
1
3
4
1 3 4
4
v.size() = 1
v.size() = 0

注意:与inset()一样,在地址的层面操作,如果删除特定元素删除,可以用迭代器遍历删除,或者,你有更好的办法?
3.sort排序
本质上与数组排序相同,都是传给sort()函数地址,但是写法不同,代码如下,附说明

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	int a[3];
	vector<int> v;
	a[0] = 2; 
	v.push_back(2);
	
	a[1] = 3;
	v.push_back(3);
	
	a[2] = 1;
	v.push_back(1); 
	
	sort(a,a+3);	//数组排序  
	
	sort(v.begin(),v.end());	//stl容器排序 
	
	//如果v写出sort(v,v+3)不能通过编译,因为其不能代表地址,数组的a与a+3是代表地址的 
	
	for(int i = 0;i<3;i++) cout<<a[i]<<' ';
	
	cout<<endl;
	
	for(int i = 0;i<v.size();i++) cout<<v[i]<<' ';
	
	return 0;
}

运行结果:

1 2 3
1 2 3

持续更新中…

猜你喜欢

转载自blog.csdn.net/eatkeyborad/article/details/114108425