STL概论
目标 | 提升复用性 |
---|---|
尝试 | 函数(functions),类别(classes),到函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ) |
目标 | 建立数据结构和算法的一套标准,并且降低他们之间的耦合关系,以提升各自的独立性、弹性、交互操作性(相互合作性,interoperability) |
结果 | STL诞生 |
1.1. STL基本概念
- 容器(container)
- 算法(algorithm)
- 迭代器(iterator)
1.2. STL六大组件简介
容器: | 各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看 STL容器是一种class template。 |
---|---|
算法: | 各种常用的算法,如sort、find、copy、for_each。 从实现的角度来看,STL算法是一种function tempalte. |
迭代器: | 扮演了容器与算法之间的胶合剂,共有五种类型. 从实现角度来看,迭代器是一种将operator* , operator-> ,operator++,operator--等指针相关操作予以重载的class template.所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。 |
仿函数: | 行为类似函数,可作为算法的某种策略。 从实现角度来看,仿函数是一种重载了operator()的class 或者class template |
适配器: | 一种用来修饰容器或者仿函数或迭代器接口的东西。 |
空间配置器: | 负责空间的配置与管理。 从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte. |
STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。
string
//定义
string s1;
string s2 (s;
string s3(s0,;
string s4 (s0,3, ;
string s5 ("let us learn string");
string s6 ("let us learn string",;
string s7 (10, 'x');
string s8 (s0.begin(), s0.begin()+;
总结:
string(直接输入数组/已有数组名)
string(数组,开始的下标,取几个)
string(数组开始的位置,数组结束的位置)
string(几个,字符)
//操作
=,assign() //赋以新值
swap() //交换两个字符串的内容
+=,append(),push_back() //在尾部添加字符
insert() //插入字符
insert(要被插入的地方,插入的字符)
erase() //删除字符
erase(要删除的位置)
erase(要删除的第一个字符位置,要删除的最后一个字符的后一个位置)
clear() //删除全部字符
replace() //替换字符
replace(替换的下标,多少个字符被替换,替换的字符)
replace(替换的字符的开始位置,替换字符的最后一个位置的后一个位置,替换字符)
replace(替换字符的下标,多少个字符被替换,替换成多少遍个,替换字符)
size(),length() //返回字符数量
capacity() //返回重新分配之前的字符容量
reserve() //保留一定量内存以容纳一定数量的字符
copy() //将某值赋值为一个C_string
c_str() //将内容以C_string返回
data() //将内容以字符数组形式返回
substr() //返回某个子字符串``
string:
vector:
deque :