c++标准模板库(STL)vector容器整理

c++标准模板库(STL) vector容器整理

1. vector

vector翻译为向量,理解为“变长数组”,长度根据需要而自动改变的数组。vector在内存中分配一块连续的内存空间进行存储,支持不指定vector大小的存储。

优点:

  1. 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组进行动态操作。通常体现在push_back() pop_back()。
  2. 随机访问方便,即支持[ ]操作符和vector.at()
  3. 节省空间。

缺点:

  1. 在内部进行插入删除操作效率低。
  2. 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。
  3. 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放
1.1 vector定义

初始化定义一个数组:

vector<int> vec;
vector<int> vec(m, 0);//定义大小为m的数组,初始化为0
vector<vector<int>> vec_2D(n, vector<int>(m, 0));//定义大小为n行m列的数组,初始化为0
//通过数组初始化
double a[]= {1.0, 2.0, 3.0, 4.0, 5.0, 1.0, 2.0, 3.0, 4.0, 5.0};
vector<double> arr(a,a+10);
1.2 vector元素访问

vector两种访问方式,下标访问和迭代器访问。其中注意迭代器的begin()是取首元素,但是end()是取尾元素的下一个地址,而不存储任何元素。美国人的思维是左闭右开。

下面是三种方式的遍历模板:

//通过下标访问
for(int i = 0;i<vec.size();i++){
    cout<<vec[i];
}
//通过迭代器访问,其中vec[i]==*(vec.begin+i);但是只有vector和string允许迭代器加整数的写法。
vector<int>::iterator it = vec.begin();
for(int i = 0;i<vec.size();i++){
    cout<<*(it+i);
}
//通过迭代器访问
for(vector<int>::iterator it = vec.begin();it!=vec.end();it++){
    cout<<*it;
}
1.3 vector常用函数

vector的基本功能如下:

vec.push_back({1, 2, 3});//添加元素
vec.pop_back();//删除尾元素
cout<<vec.size();//返回数组大小
vec.clear();//清空数组
cout<<vec.empty();//判断是否为空

初此之外,还有一些常用的函数:

find()函数,查找vector指定的元素

vector<int>::iterator it = find( vec.begin(), vec.end(), 3 ); //查找3
if ( it == vec.end( ) ) //没找到
	cout << "No" << endl;
else{//找到
    cout << "Yes" << endl;
    cout << distance(vec.begin(), it)<<endl;//如果找到的话,那么这个it的位置表示第一次出现3的位置
}

insert()函数,insert(it, x)用来向任意迭代器it的处插入一个元素x

vec.insert(vec.begin()+2, -1);//将-1插入vec[2]的位置

erase()函数, 删除元素,有两种情况

vec.erase(vec.begin()+1);//删除vec[3]
vec.erase(vec.begin()+1, vec.begin()+4);//删除一个区间的元素

还有一些在#include <algorithm> 头文件下的常用操作

求vector最大最小值使用max_element()和min_element()

vector<double>::iterator max = max_element(arr.begin(),arr.end());
vector<double>::iterator min = min_element(arr.begin(),arr.end());  

reverse(),将容器翻转

reverse(vec.begin(),vec.end());

sort(),排序函数

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).
//可以通过重写排序比较函数按照降序比较,如下:
//定义排序比较函数:
bool Comp(const int &a,const int &b)
{
return a>b;
}
sort(vec.begin(),vec.end(),Comp)//这样就降序排序。

fill() 可以把容器某一区间赋为相同的某个值

fill(vec.begin(), vec.begin()+10, 233);

lower_bound()和upper_bound() 在[first,last)范围内

lower_bound(first, last, val)用来寻找范围内第一个值大于等于val元素的位置,返回迭代器。

unpper_bound(firse, last, val)用来寻找范围内第一个值大于val元素的位置,返回迭代器。

等等……

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值