标准库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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值