《算法竞赛从入门到进阶》笔记整理 3.1.1 vector

当空间紧张时,可以用STL的vector建立动态数组,以达到节约空间的目的。
vector是STL的动态数组,在运行时能够根据需要改变数组的大小。由于它以数组形式存储,也就是说它的内存空间是连续的,所以索引可以在常数时间内完成,但是在中间进行插入和删除会造成内存块的复制。另外,如果数组后面的内存空间不够,需要重新申请一块足够大的内存。这些都会影响vector的效率。
vector是一个模板类,可以存放任何类型的对象。
1.定义
定义int类型数组:

vector<int> a;//默认初始化,a为空的int类型动态数组
vector<int> b(a);//用a定义b的长度
vector<int> a(10);//a有100个值为0的元素
vector<int> a(10,6);//a有100个值为6的元素

测试如下:

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<int> a;
	for(int i=0;i<a.size();i++){
		cout<<a[i]<<" ";
	}
}

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
int main(){
	int a=5;
	vector<int> b(a);
	for(int i=0;i<b.size();i++){
		cout<<b[i]<<" ";
	}
}

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<int> a(10,6);
	for(int i=0;i<a.size();i++){
		cout<<a[i]<<" ";
	}
}

在这里插入图片描述
定义string类型数组:

vector<string> a(10);//10个空值
vector<string> a(10,"null");//10个值为null的元素
vector<string> b(a.begin(),a.end());//b是a的复制

测试如下:

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<string> a(10);
	cout<<a.size()<<endl;
	for(int i=0;i<a.size();i++){
		cout<<a[i]<<" ";
	}
}

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<string> a(10,"null");
	for(int i=0;i<a.size();i++){
		cout<<a[i]<<" ";
	}
}

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
int main(){
	vector<string> a(5,"hello");
	vector<string> b(a.begin(),a.end());//这里的a也应该是个动态数组,否则不能用begin()和end()函数调用
	for(int i=0;i<b.size();i++){
		cout<<b[i]<<" ";
	}
}

在这里插入图片描述
定义结构型数组:

struct point{
	int x,y;
};
vector<point> a; 

也可以用vector定义多维数组:

const LEN=100;
vector<int> a[LEN];//定义一个100行二维数组,每行都是一个vector容器

2.常用操作

vector<int> a;
a.size();//返回数组的元素个数
a.empty();//判断数组是否为空
a[0];//元素的查询访问
a.insert(a.begin()+i,k);//在第i个元素前插入k
a.push_back(100);//在数组尾部添加一个值为100的元素
a.insert(a.end(),10,5);//在尾部插入10个值为5的元素
a.pop_back();//删除末尾元素
a.erase(a.begin()+i,a.begin()+j);//删除区间[i,j-1]的元素
a.erase(a.begin()+2);//删除第三个元素,序号从0开始
a.resize(n);//将数组大小变为n
a.clear();//将数组清空
reverse(a.begin(),a.end());//将数组翻转
sort(a.begin(),a.end());//将数组升序排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值