这是我参与更文挑战的第8天,活动详情查看: 更文挑战
1. vector互换容器
两个容器内元素的交换。
(1)基本用法
swap(vec) //将vec与本身的元素互换
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it != v.end();it++)
{
cout<< *it <<" ";
}
cout<<endl;
}
//vector容器赋值
void test()
{
vector<int>v1;//默认构造函数,无参数
for (int i = 0; i<10; i++)
{
v1.push_back(i);
}
cout<<"互换前:"<<endl;
printVector(v1);
//swap()
vector<int>v2;
for (int i = 10; i<20; i++)
{
v2.push_back(i);
}
printVector(v2);
v1.swap(v2);
cout<<"互换后"<<endl;
printVector(v1);
printVector(v2);
}
int main(){
test();
}
输出结果:
互换前:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
互换后
10 11 12 13 14 15 16 17 18 19
0 1 2 3 4 5 6 7 8 9
(2) swap()帮助减小不必要的内存消耗
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printVector(vector<int>&v)
{
for(vector<int>::iterator it = v.begin();it != v.end();it++)
{
cout<< *it <<" ";
}
cout<<endl;
}
//vector容器赋值
void test()
{
vector<int>v1;//默认构造函数,无参数
for (int i = 0; i<10000; i++)
{
v1.push_back(i);
}
cout<<"v1的容量为:"<<v1.capacity()<<endl;
cout<<"v1的长度为:"<<v1.size()<<endl;
//将v1的容量缩减到3
v1.resize(3);
cout<<"v1的容量为:"<<v1.capacity()<<endl;//容量没变,内存空间浪费
cout<<"v1的长度为:"<<v1.size()<<endl;
//通过swap()操作缩减空间
vector<int>(v1).swap(v1);
cout<<"v1的容量为:"<<v1.capacity()<<endl;
cout<<"v1的长度为:"<<v1.size()<<endl;
}
int main(){
test();
}
输出结果:
v1的容量为:16384
v1的长度为:10000
v1的容量为:16384
v1的长度为:3
v1的容量为:3
v1的长度为:3
2. vector预留空间
减少vector在动态拓展容量时的拓展次数。
reserve(int len) //容器预留len个长度,预留位置不初始化,与resize不同,元素不可访问
3. vector实现查找功能
vector与map不同,没有自带的find功能,但可以通过头文件algorithm中find函数实现。
格式如下:
vector<T>::iterator it = find(vector数组中开始位置,vector数组中结束位置,value)
T : vector数组类型
value:要查找的值
代码如下:
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> v;
v.push_back(10);
v.push_back(9);
v.push_back(4);
int value;
cout<<"请输入想要查找的数 ";
cin>>value;
vector<int>::iterator it = find(v.begin(),v.end(),value);
if(it != v.end())
cout<<*it<<endl;
else
cout<<"找不到"<<value<<endl;
return 0;
}
输出结果:
请输入想要查找的数 10
10
附上find函数源码:
template <class _InputIterator, class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
_InputIterator
find(_InputIterator __first, _InputIterator __last, const _Tp& __value_)
{
for (; __first != __last; ++__first)
if (*__first == __value_)
break;
return __first;
}