C++ STL vector用法详解

一:简介:

vector是c++中一种非常常用的数据类型,也叫不定长数组,是STL的一种容器。我们可以随时向其中插入一个数据,在定义时也不需要指定其大小,使用方便。再加上他的很多特性,并且支持sort函数排序,深受码农们以及竞赛党喜爱。

二:头文件:

#include<vector>

三:定义:

vector<类型名> 变量名
//例如
vector<string> wwyz;

也可以在变量名后加入(数值)来设置一个大小为添加数值的一个数组。

vector<string> s(5);

如上面代码所示,我们就设置了一个长度为5的变量名为s的一个字符串型数组,当前s[0]-s[5]的值均为空。值得一提的是,我们虽然设置了大小,我们仍然可以在s后继续添加元素。

我们还可以在变量名后的()中设置两个数值.

vector<string> s(5,"wwyz");

这样就表示我们就在长度为5的数组中,给每一个元素都赋值了5.

四:含义:

vector声明其类型为不定长数组,类型名可以为任意类型(pair<>也可以使用),变量名即为以后要操作的变量>

五:插入元素:

vector常见的插入操作有两种.

一:push_back()

s.push_back("booyi");

这就表示我们在s数组末尾处添加了一个元素"booyi"。

二:insert()

s.insert(s.begin(),"wwyz");

这就表示我们在开头添加了元素"wwyz"

我们可以用insert()来在vector中任意位置插入元素,insert()第一个元素代表要插入的位置,第二个元素就是插入的元素.

六:获取元素:

我们可以把vector当做数组,直接用[]来获取元素.

vector<int> s;
s.push_back(111);
cout<<s[0];

这样我们就输出了s中第一个元素111.

也可以使用迭代器获取

#include<iostream>
#include<vector>

using namespace std;
int main()
{
	vector<string> s(5,"wwyz");
	
	vector<string> :: iterator it;
	
	for(it=s.begin();it!=s.end();it++) cout<<*it<<endl;
}

这样就从s开头到最后输出

wwyz

wwyz

wwyz

wwyz

wwyz

七:查找元素:

#include<iostream>
#include<vector> 
#include<algorithm>

using namespace std;
int main()
{
	vector<int> a;
	a.push_back(1);
	a.push_back(2);
	a.push_back(3);
	a.push_back(4);
	
	vector<int> :: iterator it=find(a.begin(),a.end(),3);
	cout<<*it;
 } 

注意,使用find时需要加入algorithm库。

find(起始位置,终止位置,查找元素),它返回一个迭代器,内容为此元素在数组中的位置,要用*来输出.

我们也可以使用lower_bound()函数来二分查找,时间复杂度为o(longn)

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
int main()
{
	vector<int> s;
	for(int i=1;i<=5;i++) s.push_back(i);
	vector<int> ::iterator it=lower_bound(s.begin(),s.end(),4);
	cout<<*it;
 } 

函数使用方法:lower_bound(起始位置,终止位置,查询的数据).

注意lower_bound函数返回值为一个迭代器.

八:排序:

vector容器可直接用sort排序.

sort(起始位置,终止位置,比较函数).

#include<iostream>
#include<vector>
#include<algorithm>

bool cmp(int x,int y)
{
	return x>y;
}
using namespace std;
int main()
{
	vector<int> s;
	for(int i=1;i<=5;i++) s.push_back(i);
	sort(s.begin(),s.end(),cmp);
	cout<<s[0];
 } 

这样就完成了对s的从大到小排序.

九:删除:

vector可以用pop_back()来删除最后一个元素,也可以用erase()来删除当前迭代器指向元素.

十:重构vector:

我们可以用一些函数对vector重构.

比如rbegin()

#include<iostream>
#include<vector>
#include<algorithm>

bool cmp(int x,int y)
{
	return x>y;
}
using namespace std;
int main()
{
	vector<int> s;
	for(int i=1;i<=5;i++) s.push_back(i);
	sort(s.begin(),s.end(),cmp);
	vector<int> a(s.rbegin(),s.rend());
	cout<<(a<s);
 } 

我们刚开始对s赋值为 1,2,3,4,5

sort排序后s为5,4,3,2,1

对a从s的起始位置和终止位置逆序重构,得到a为1,2,3,4,5

我们将a与s比较,因为a<s所以输出1.