vector用法小结

概念

vector像一个变长的数组.
常见用途:
(1)存储数据
(2)用临接表存储图

定义

vector<typename> name;
struct node{
	int x,y;
};
vector<node> name;
vector<int> vi[100];

容器内元素的访问

通过下标访问

对于一个vector < typename > vi,直接访问vi[index]即可(如vi[0]、vi[1]),下标从0到vi.size()-1

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i]<<endl;
}
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
struct node{
	int x,y;
};
vector<node> vi;
int main(){
	for(int i=1;i<=10;i++){
		node s;
		s.x=i;s.y=i+1;
		vi.push_back(s);
	}
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i].x<<" "<<vi[i].y<<endl;
}
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<pair<int,int> > vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(make_pair(i,i+1));
	}
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i].first<<" "<<vi[i].second<<endl;
}

通过迭代器访问

迭代器可以理解为类似指针的东西

vector<typename>::iterator it; 

//vi.begin()为取vi的首元素地址;end()不是取尾元素的地址,而是取尾元素地址的下一个地址
vi[i]与*(vi.begin()+i)是等价的
STL中只有vector和string才能使用vi.bengin()+3这种迭代器加上整数的写法

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	int len=vi.size();
	vector<int>::iterator it=vi.begin();
	for(int i=0;i<len;i++)
		cout<<*(it+i)<<endl;
}

自加(减)操作,++it

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vector<int>::iterator it;
	for(it=vi.begin();it!=vi.end();it++){
		cout<<(*it)<<endl;
	}
}

常用函数

push_back

在vector后面添加一个元素,时间复杂度O(1)

vi.push_back(i);
vi.push_back(make_pair(i,i+1));
node s;
s.x=i;s.y=i+1;
vi.push_back(s);

pop_back()

用以删除vector的尾元素,时间复杂度O(1)

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.pop_back();
	int len=vi.size();
	vector<int>::iterator it=vi.begin();
	for(int i=0;i<len;i++)
		cout<<*(it+i)<<endl;
}

size()

用来获取vector中元素的个数,时间复杂度O(1)

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.pop_back();
	int len=vi.size();
	cout<<len<<endl;
}

clear()

清空vector中所有元素,时间复杂度O(N),N为vector元素中的个数

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.clear();
	int len=vi.size();
	cout<<len<<endl;
}

insert()

insert(it,x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度O(N)。

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.insert(vi.begin()+3,100);
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i]<<endl;
}

erase()

删除有两种用法,删除单个元素,删除一个区间内的所有元素。时间复杂度为O(N)。

删除单个元素

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.erase(vi.begin()+3);
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i]<<endl;
}

删除一个区间内所有的元素
erase(first,end)即删除[first,second)内所有的元素

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.erase(vi.begin()+3,vi.begin()+7);
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i]<<endl;
}
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
vector<int> vi;
int main(){
	for(int i=1;i<=10;i++){
		vi.push_back(i);
	}
	vi.erase(vi.begin(),vi.end());
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i]<<endl;
}

sort()

sort(vi.begin(),vi.end());由小到大排序
sort(vi.rbegin(),vi.rend());由大到小排序

#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> vi;
int main(){
	for(int i=10;i>=1;i--)
	vi.push_back(i);
	sort(vi.begin(),vi.end());
	int len=vi.size();
	for(int i=0;i<len;i++)
	cout<<vi[i]<<" ";
	cout<<endl;
	sort(vi.rbegin(),vi.rend());
	for(vector<int>::iterator it=vi.begin();it!=vi.end();it++){
		cout<<*it<<" ";
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值