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.