ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ"
vector文档介绍 大部分的使用与string的使用类似
vector类似于顺序表,是动态增长的数组。头文件:#include < vector >
vector<int> v1;//可以是int类型,也可以是任意类型
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
vector<string> v2;//可以是string类型
v2.push_back("易烊千玺");
v2.push_back("王俊凯");
v2.push_back("王源");
vector<int> v3;
v3 = v1;
vector<double> v4(10, 1.2);//10个1.2进行初始化
//可以迭代器区间进行初始化
vector<string> v5(++v2.begin(), v2.end());
//从v2的第二个到最后一个,对v5进行初始化
string s = "hello world";
vector<char> v6(s.begin(), s.end());
//可以是任意类型的迭代器,不一定是自已类型的迭代器
注意:allocator是空间配置器,其实就是内存池。空间配置器也可以自己写。
vector的遍历
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
//vector的遍历
//1.[]
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
//2.迭代器
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
//3.范围for
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
单次增容越多,增容次数越少,效率就越高,但是可能浪费空间越多。(如果知道要开多少空间可以用reverve())
shrink_to_fit
shink_to_fit会把容量变得和size一样,但是这个函数需要慎用,因为空间不是一部分还给操作系统,而是把所有空间都还给操作系统,重新开辟一块空间把数据放入。
insert
vector是不支持下标插入的,只支持迭代器;string是支持下标插入的。
vector是没有头插的,可以用insert进行头插。insert也支持尾插。【超过尾插就不可以了,就会越界访问,编译出现错误】
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.insert(v.begin(), -1);//相当于头插
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
v.insert(v.begin() + 5, 20);//相当于尾插
//v.insert(v.begin() + 7, 30);//这行代码,会报错
//此时一共有6个数据,如果在第8个位置插入是不可以的,不可以越界
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
查找
vector和list都没有查找函数,复用的是算法里面的find()函数
find()函数支持一段迭代器区间找一个值,没有找到返回last.[所以,是一个前闭后开区间];头文件是#include < algorithm > 算法
删除3->先找3这个位置->删除
代码展示:
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
//查找
vector<int>::iterator pos = find(v.begin(), v.end(),3);
//auto pos = find(v.begin(), v.end(), 3);//这一种比较方便
if (pos != v.end())
{
cout << "找到了" << endl;
v.erase(pos);
}
else
{
cout << "没有找到" << endl;
}
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
vector<int> v;
v.push_back(1);
v.push_back(0);
v.push_back(5);
v.push_back(8);
v.push_back(4);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//默认升序
sort(v.begin(), v.end());
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//仿函数,降序
sort(v.begin(), v.end(), greater<int>());
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
以上就是今天要讲的内容,本文详细的介绍了vector的使用,vector iterator的使用,vector空间增长问题,vector增删查改。希望给友友们带来帮助!