C++ vector学习

一、vector常用

vector容器单端动态数组,支持随机访问,在堆区申请的空间。

0.API

//构造函数
vector<T> v;
vector(n,num);   //n个num                 
vector(const vector &vec);//拷贝构造       
vector(v.begin(),v.end());   //          
//例:
vector<int> v1(5,1);
vector<int> v2 = v1;
vector<int> v3(v1.begin(),v1.end()) 

//赋值操作:区间赋值、n个元素赋值、等号赋值(重载等号运算符)
vector<int> v4;
//v4 = v3;
v4.assign(6,2);

//交换--长度不同也可以交换
v3.swap(v4);

//empty()   是否为空,为空返回真

//重置大小
vector<int> v5(2,10);  // 10 10
	//v5.resize(5);  //过大补零 10 10 0 0 0 
	//v5.resize(5,20); //过大补resize中的值 10 10 20 20 20 ,容量不够扩容
	//v5.resize(1); //过小删除,容量不变   10
//reserve() 预留空间,提前给定空间容量大小

//访问元素
vector<int> v6 = {1,2,3,4,5};
//访问第0个元素,其中at越界抛出异常,[]则不会,也可修改元素
cout<<v6.at(0);
cout<<v6[0]; 
v6.at(0) = 10;
v6[1] = 20;              //10 20 3 4 5

1.sort函数

代码如下(示例):

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(const int& a,const int& b)
{
	//默认return a<b  从小到大
	return a>b;
}

struct jyStruct
{
	int a,b;
};
bool jyCmp(const jyStruct& a, const jyStruct& b)
{
	return a.a<b.a;  //a.a<b.a返回真,即将结构体按照变量a从小到大进行排序
}

static bool vecCmp(const vector<int>& a,vector<int>& b)
{
	if(a[0] == b[0])
		return a[1]<b[1];
	return a[0]>b[0];   //按照第一个元素从大到小排序,相同按照第二个元素从小到大排序
}
int main(int argc,char** argv)
{
//打印输出vector中的元素
	vector<int> v1 ={1,3,2,6,5};
	for(int i:v1)
	{
		cout<<i<<" ";  //  1,3,2,6,5
	}
	sort(v1.begin(),v1.end());  //默认第三个参数省略,按照从小到大的顺序排列;
	                           //打印输出结果为1,2,3,5,6
	                           
	sort(v1.begin(),v1.end(),cmp);//第三个参数cmp函数,a>b时返回真,从大到小排序
								 //打印输出结果:6,5,3,2,1
								 
	jyStruct  x, y;
	x.a = 1;
	x.b = 2;
	y.a = 2;
	y.b = 1;
	vector<jyStruct> v2;   //v2 = {x,y}
	v2.push_back(x);
	v2.push_back(y);
	sort(v2.begin(), v2.end(),jyCmp); 
	for(int i=0;i<2;i++)
	{
		cout<<v2[i].a<<" "<<v2[i].b<<" "<<endl;
	}  //输出结果:1  2
	   //          2  1
	vector<vector<int>> v3;
	v3 = { {7,0} ,{4,4},{7,1},{5,0},{6,1},{5,2} };
	for (int i = 0; i < 6; i++)
	{
		cout <<"["<<v3[i][0] <<","<<v3[i][1]<<"]";   //[7,0] [7,1] [6,1] [5,0] [5,2] [4,4]
	}
	return 0;
}

2.insert函数

代码如下(示例):

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	vector<int> v4 = {1,3,2,5,4};
	v4.insert(v4.begin(), 9);   //在最前面插入元素  9,1,3,2,5,4
	v4.insert(v4.begin()+2, 9);  //在迭代器第二个元素前插入元素 1,3,9,2,5,4
	v4.insert(v4.end(), 9);  //在末尾插入元素  1,3,2,5,4,9
	v4.insert(v4.end(), 3,9);  //在末尾插入3个9    1,3,2,5,4,9,9,9   
	                         //这里的3个9可以是数组中元素,例如,数组q[]={1,2,3},可以插入q[1]个q[2]
 	vector<int> v5 = { 6,7,8 };
	v4.insert(v4.end(), v5.begin(), v5.end());  //连接两个vector,v4后面插入v5  1,3,2,5,4,6,7,8    

	return 0;
}

3.erase()函数

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//每次运行STL函数假定v没有被处理过
int main()
{
	vector<int> v{1,3,3,3,3,5};
	v.erase(v.begin(), v.begin() + 1); //移除指定区间的元素, 3,3,3,3,5
	v.erase(v.begin()+1);              //移除指定位置的元素   1,3,3,3,5
	v.erase(v.begin()+1,v.begin()+ 5); //删除容器中的3,右边不包含,所以到下一个位置 1 5
	
   // remove(v.begin(), v.end(), 3);     //单独的remove函数(STL中的函数)将区间内为val的元素移到v的末尾,并没有删除,返回的是未指定删除元素的最后一个迭代器,需要配合erase()使用
   	v.erase( remove(v.begin(), v.end(), 3),v.end());  //{1 5}

	//unique(start,end,pred) 去重函数,需要将容器排序,(去重起点的迭代器位置,去重终点迭代器位置[不包括],自定义判断去重方式)
	vector<int>::iterator pos = unique(v.begin(),v.end()); //返回容器中没有重复元素的下一个位置的迭代器
	v.erase(pos,nums.end());    //1,3,5
}

4.swap缩小空间

vector<int> v1;
v1.reserve(1000);  //容量1000
v1.assign(5,100);
vector<int>(v1).swap(v1)  //容量5   匿名对象



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值