标准库STL
stringstream
- 头文件sstream。格式化字符流
#include <iostream>
#include <sstream>
using namespace std;
int main(){
stringstream ss;
// hex 以十六进制保存 oct是8进制
ss <<89<<" Hex: "<< hex<<89<<" Oct: "<< oct <<89;
cout<<ss.str()<<endl;
//89 Hex: 59 Oct: 131
int a,b,c;
string s1;
ss >> hex >> a;
//a:137
cout <<"a:"<<a<<endl;
ss >> s1;
cout<<"s1:"<<s1<<endl;
//s1:Hex:
ss>>dec>>b;
cout<<"b:"<<b<<endl;
//b:59
ss.ignore(6);//忽略空空Oct:6个字符
ss >>oct>>c;
cout<<"c:"<<c<<endl;
//c:89
}
vector
动态数组
- 文件
#include<vector>
- 定义
vector<数据类型> 变量名;
如,vector vec; 定义一个int类型名叫vec的动态数组
- 插入元素:
vec.push_back(1);// vec中的元素[1]
vec.push_back(2);// vec中的元素[1,2]
vec.push_back(3);// vec中的元素[1,2,3]
- 删除元素:pop_back(),删除动态数组中最后一个元素
如果动态数组为空,用pop_back会出错
vec.pop_back(3);
- 数组长度:.size()
vec.size();
vec.size()-1,动态数组大小范围,最后一个元素下标
- 访问元素
与普通数组类似:
vec[0] 访问第一个元素
- 遍历
vector<int>vec;
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
- 清空及释放内存
vector().swap(vec);
是否为空:
vec.empty()
- 整体赋值
vectorvec1;
vectorvec2;
vec1.push_back(1);
vec1.push_back(2);
vec2=vec1;//vec2与vec1一模一样
- 排序
使用迭代器
全排序,sort(vec.begin(),vec.end());
对前3数排序,sort(vec.begin(),vec.begin()+3);
自定义类型
struct Stu{
string name;
int score;
}
vector<Stu>vec;
Stu a;
a.name="abc";
a.score=100;
vec.push_back(a);
vec.push_back({"bbb",90});
初始化为一个数
vectorvec(100,0);//vec是大小为100,所有值为0的动态数组
queue
- 头文件
#include <queue>
-
特点:先进先出,后进后出
-
定义:
queue<数据类型> 名称
- 入队:
queue que;
que.push(1);
- 删除一个元素:
que.pop();
- 访问队首元素:
que.front();
- 清空队列:
while(!que.empty()){
que.pop();
}
empty()检测队列是否为空,空则返回true;
- 队列长度:
que.size();
set集合
- 元素唯一
- 非线性,不支持随机访问
- 底层是二叉树,红黑树
- 元素间必须能比较大小
定义
set a;
添加元素
a.insert(“li”);
删除元素
a.erase(“元素名字”);
集合大小
a.size()
集合遍历
for(set<string>::iterator i=a.begin();i!=a.end();++i){
cout<<*i<<endl;
}
是否包含某一元素
a.count(“争”);
集合并集
a.insert(b.begin(),b.end());//a、b都是集合
集合差集
for(set<string>::iterator i=b.begin();i!=b.end();++i)
a.erase(*i);
map映射
- <键,值>结构 key-value
- 键值对,内部是红黑树
- 键要支持比较大小
定义
map<string,int> a;
添加元素
a[“老大”]=90;
[]功能
- 读取某key的值
- 添加新的key-value键值对
- 修改某个key的value的值
map的大小
- a.size()返回map中元素总数
查询map中不存在的元素
- 相当于添加了一个新的“不存在”的元素
#include <iostream>
#include <map>
using namespace std;
int main(){
map<string,int> b;
b["老大"]=9;
b["老二"]=6;
cout<<b.size()<<endl;
cout<<b["老三"]<<endl;
cout<<b.size()<<endl;
cout<<b["老三"]<<endl;
return 0;
}
//输出结果
//2
//0
//3
//0 新的b["老三"]值为0
判断元素是否存在
两种方法
- b.find(key)!=m.end();
- b.count(key);
删除键值对
- b.erase()
遍历键值对
for(map<string,int>::iterator i=b.begin();i!=b.end();++i){
cout<<i->first<<":"<<i->second<<endl;
}