基础c++学习(STL标准模板库)

本文详细介绍了C++标准模板库(STL)中的关键组件,包括容器(如vector、stack、queue、set和map)、算法、迭代器以及一些实用示例,展示了如何利用这些工具提高代码效率和性能。
摘要由CSDN通过智能技术生成

C++标准模板库(STL,Standard Template Library):直接调用,可以节省时间
四个组件:容器,算法,迭代器,仿函数

一:向量vector
#include
1.构造:vector vec;
vector vec2;
vector arr(100,1);//构造初始长度100的int数组,初值为1。
vector<vector> dp(5,vector(6,10));//二维数组,5行6列,等价于int arr[5][6].
3.尾接和尾删
arr.push_back(1);//在arr数组的尾部加入1.
Arr.pop_back();//删除arr数组尾部的数.
4.获取数组长度
arr.size();//获取arr这个数组的长度.
5.快速清空数组和确认是否清空
arr.clear(); arr.empty();//bool值,空则返回true,非空返回false.
6.改变数组长度
arr.resize(5);//将arr数组长度改变为5.
遍历数组:for(int i=0;i<arr.size();i++)
二:栈stack,先进先出
进栈:stk.push();
出栈:stk.pop();
注意:不可访问栈内元素。
三:队列queue,先进后出
进队:que.push();
出队:que.pop();
四:优先队列priority queue
提供常数时间的最大元素查找,对数时间的插入与提取,底层原理是二叉堆。
priority_queue<int,vector,greater> pque;//将int改成long就会变成小顶堆,输入进最小值。
pque.push(1);
cout<<pque.top()<<endl;
pque.push(3);
cout<<pque.top()<<endl;
pque.push(2);
cout<<pque.top()<<endl;
pque.push(4);
cout<<pque.top()<<endl;
将会输出:1 3 3 4(每次都输入进最大值)
注意事项:仅仅堆顶可以修改。
五:集合set
在这里插入图片描述

插入元素:st.insert();
擦除元素:st.erase();
清空元素:st.clear();
判断空:st.empty();
查找元素:st.find();
判断元素是否存在:st.count();
遍历(迭代器):for(set::iterator it = st.begin();it != st.end();++it)
cout<<it<<endl;
基于范围的循环遍历(c++ 11):for(int &ele :st)
Cout<<ele<<endl;
适用范围:元素去重,维护顺序,元素是否出现过.
注意事项:set虽说可遍历,但仅可使用迭代器进行遍历,它不存在下标这一概念,无法通过下标访问到数据。
cout<<st[0]<<endl;(错误)
cout<<*st.begin()<<endl;(正确)

六:映射map:任意类型到任意类型的映射
在这里插入图片描述
在这里插入图片描述

查询元素:mp.find();
擦除元素:mp.erase();
查询元素出现次数:mp.count();
判断是否是空:mp.empty();
清除元素:mp.clear();
遍历(迭代器):太麻烦
for(map<int,int>::iterator it = mp.begin();it != mp.end();++it)
cout<first<<’’<second<<endl;
基于范围的循环遍历(c++ 11):
for(int &ele :mp)
cout<<ele.first<<’’<<ele.second<<endl;

eg:
快速排序:sort(arr.begin(),arr.end())
七:string
取位:string s1=”123456”;
cout<<s1.substr(3,5)<<endl;//从第三位取五个元素
转换类型:string s=”12312233”;
long double x=stold(s);//转换成double型

int x=66664;
string s=to_string(x);//int类型转换成string型
八:二元组pair
构造:pair<int,int> p=make_pair(1,2);
或pair<int,int> p={2,2};

迭代器:有些数组没办法用下标完成遍历,非线性的数据结构遍历用迭代器。
在这里插入图片描述

如无必要,最好不用迭代器操作容器。

九:算法
1.swap(a,b);//交换a和b
2.sort(arr.begin(),arr.end());//给arr数组进行从大到小排序,加第三个参数greater(),便可实现从大到小排序
3.Int pos = upper_bound(arr.begin().arr.end(),9)-arr.begin();
cout<<pos<<endl;//二分查找法,在arr数组中从开头开始查找比9大的数,并显示这个数所在的位置
4.reverse(arr.begin()+2,arr.begin()+5);//从arr的第二位到第五位开始反转arr数组
5.cout<<min(min(1,3),2)<<end;//打印最小值
或cout<<min({1,2,3,4})<<end;
6.unique()常用构造:去重
在这里插入图片描述
7.数学函数
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值