vector容器的使用

vector(向量)为封装了动态大小的顺序容器,可以理解为变长数组,长度可以任意变化,甚至定义时令其长度为0
与数组类似,可以直接访问(下标)

1.初始化
#include <vector>
vector<typename> name;   //typename可为简单或复合类型
vector<Node*> n;

vector<int> a;		//长度为0的vector
vector<int> a(100);  //长度100,值默认均为0(int时)
vector<int> a(100,2)  //长度为100,且值均为2
vector<int> a{1,2,3,4};  //直接指定内容
2.访问

a[i]* (a.begin() + i )相同
注意:i为迭代器,则取迭代器的值:*i
迭代器遍历元素: ++ii++

//迭代器访问
vector<int>::iterator it;
it=a.begin();
*it==a[0];  //迭代器访问=下标访问
3.遍历

vector的迭代器不支持 i < a.end() 写法,因此循环条件只能用 i != a.end()

for(int i=0;i<a.size();i++){  //下标访问
	cout<<a[i];  //此时a[i]必须存在
}

//vector<typename>::iterator it;
for(auto i=a.begin();i!=a.end();i++)  //迭代器只有=或者!=,没有i<a.end()
	cout<< *i;

for(auto i:a){  //此时的i为a中元素,不是迭代器
	cout<< i;
4.常用函数(插入、删除…)
a.size();    //元素个数

a.back();  //a的最后一个元素
a.front();	//a的第一个元素

//插入
a.insert(i,val);  	//迭代器i前插入
a.push_back(val);   //数组尾部插入

//删除
a.pop_back();  //弹出尾元素
vi.earse(i);  //删除迭代器i处元素,不可以写下标
v1.erase(a.begin(),a.begin()+2);  //删除前两个元素(含前不含后)
a.clear();  //清空
a.empty();  //判空,空返回1
返还值
//返回空数组
return {};
//返回固定的vector,例如int
return {1,2};
#include<algorithm>

常用算法:

//以下均为含前不含后
sort(a.begin(),a.end()); 	//排序
reverse(a.begin(),a.end()); //逆置
copy(a.begin(),a.end(),b.begin()+1); //复制,将a覆盖到b中,从b.begin()+1(包括)位置开始
find(a.begin(),a.end(),10); //查找,返回位置

\qquad

二维数组
1.初始化
//初始化m*n的二维数组
vector<vector<int>> array(m);  //初始化大小为m的数组,每个元素均为vector<int>类型,即array[m][]
for(int i=0;i<m;i++) 
{
    array[i].resize(n);		array[m][n]
}

//创建⼀个row⾏,column列(初始值均为0)的⼆维数组
vector<vector<int>> a(row,vector<int>(column,0));
2.遍历

行数int row=a.size();
列数int column=a[0].size();

//迭代器遍历
for(i = a.begin(); i != a.end(); i++){  //遍历一维
	auto temp = *i;    //迭代器解引用,此时temp为vector<int>类型
for(it = temp.begin(); it != temp.end(); it++)
     cout << *it << "";

//下标遍历
vector<vector<int>> a(row,vector<int>(column,0));

for(int i=0;i<a.size();i++)
	for(int j=0;j<a[0].size();j++)
		cout<<a[i][j];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值