STL库总结
2021年12月13日
15:50
一.迭代器
1.迭代器是一种抽象指针,是泛型算法和容器之间的抽象层,正是因为有了迭代器和模板编程才使一个泛型算法函数就可以支持多种不同类型的容器
一.容器
容器的通用操作
1.初始化
默认构造构造为空
迭代器初始化(可以将新建的容器初始化为迭代器的指定范围的值),
构造复制初始化(将新建容器初始化为指定容器的复制版本)
列表初始化(用一个初始化列表来初始化创建的容器)
2.获取迭代器
begin()成员和end()成员来获得指定容器的迭代器
cbegin()成员和cend()成员用来获得指定容器的只读迭代器
3.查看大小
size()成员,注意size()成员的返回值是ud因此在比较时谨防出现判断条件中出现负数
4.增加和删除
insert()拷贝加入
emplace()构造加入
erase()删除
clear()清空容器
5.重载运算符
=赋值运算符
==,!=判断是否相等的运算符
<,<=,>,>=(无序容器不支持)
6.常用类型别名:
1.iterator迭代器 声明迭代器vector::iterator
2.const_iterator 只读迭代器
二.顺序容器操作:
Vector
List
Deque
添加元素:
C.push_back() 值为t
C.emplace_back() 创建并加入
C.push_front()
C.empalce_front()
C.insert(p,t);
C.emplace(p,args);
C.insert(p,n,t);
C.insert(p,b,e);
C.insert(p,l);
访问元素:
C.back()
C.front()
C[n];
C.at(n);
删除元素:
C.pop_back();
C.pop_front();
C.erase();
C.erase(b,e);
C.clear();
改变容器大小:
C.capacity();//容量的大小
C.reserve(n);//预留空间的大小
C.shrink_to_fit();//将容量减少到与size()相适应
容器适配器:
Satck<>; c.push(),c.emplace(),c.pop(),c.top(),c.size();
Queue<>;
Priority_queue<>; c.front(),c.back(),c.push();c.pop(),c.top();
二.string类及其操作
1.定义,初始化,构造初始化,复制初始化
String s;
String s(f);string s=f;
String s("value");string s="value";
String s(n,'c');初始化为n个c组成的串
2.比较
>,<,==,!=
3.拼接字符串
+
通过重载运算符来实现
4.赋值运算
=
5.访问字符,添加删除字符
下标访问和.at()函数访问
6.输入输出
is>>s os<<s //输入输出流
>>用于输入遇到空格停止读入,剩余留到缓存区中
getline(is,s) 从is中读取整行并赋给s返回is(注意getline()读取的输入不含换行符,换行符已被丢弃)
- .size()
注意 .size()函数的返回类型是string::size_type是string的一种内置配套类型一定要注意该类型是一种unsigned int当表达式出现size()时不要再使用int否者会出现大问题
7.和C语言字符串语法兼容的问题
字符字面值和字符串字面值(实际上是C语言风格的字符串即采用数组以‘\0’作为结尾进行标记)可以自动转换为string类型
7.在cctype头文件中包含了一些用于判断字符为数字或字母的函数
常用的有:
isalnum(c) 当c为字母或数字时为真
isalpha(c) 字母为真
Isdigit(c ) 数字时为真
islower(c) 小写字母为真
isupper(c) 大写字母时为真
tolower(c) 大写转小写
toupper(c) 小写转大写
8.与旧代码的接口
总体来说string对字符数组加'\0'的形式兼容性较强
1>字符数组加‘\0’可以初始化string或者为string赋值
2>加法运算或复合赋值可以将字符加'\0'自动转换为string
但一定要用一个string来初始化一个const char*类型的话能且仅能使用string的成员函数c_str()例如
const char* sh=s.c_str();注意该指针指向只读字符串无法修改而且当s改变时该指针很可能无效
上面的都是一些基本操作接下来主要提供一些string类型中常用的函数
构造string的特殊方法(注意n,len2,pos2均为无符号值)
String s(cp,n) 将s初始化为cp指向的字符串的前n个字符的拷贝(注意此数组至少要包含n个字符)
String s(s2,pos2) s是string s2从pos2开始的字符拷贝,若pos2>s2.size()行为未定义(即必须保证pos2<s2.size())
String s(s2,pos2,len2) s是string s2从pos2开始的len2个字符的拷贝,最多到结尾
子串处理函数:substr()
S.substr(pos,n) 返回一个string包含从pos开始的n个字符的拷贝,pos默认为0,n默认为s.size()-pos
改变string的其他方法
数值与字符串之间的相互转换
to_string(val) 将数值转换为字符串,返回string
stoi(s,p,b) s为待转换的字符串,p为第一个非数值支付的下标,表示进制
Stol
Stoul
Stoll
Stoull 同理注意开头都是小写
Stof(s,p) 与上相同
Stod
Stold
三.关联容器
Map,unordered_map,multimap,unordered_multimap
Set,unordered_set,multiset,unordered_multiset
Pair 类型
构造
Make_pair(v1,v1)最重要的
pair之间的重载字典比较
关联容器操作:
C.insert()
C.emplace()
C.erase(k)
C.erase(p)
C.erase(p,e)
C.find() 返回迭代器
C.count()
//下面的用于mutimap和mutiset的检测
//注意bugfree
C.lower_bound(k) 返回第一个关键字不小于k的迭代器
C.upper_bound(k)返回第一个关键字不大于k的迭代器
C.equal_range(k) 返回一个迭代器的pair表示关键字等于k的范围
四.泛型算法
max(a,b)返回a,b之间的最大值
min(a,b)返回a,b之间的最小值
sort(iterator a,iterator b)对a,b之间的范围进行排序
reverse(iterator a,iterator b)将a,b反转