c++:STL容器及其接口(string、vector、deque、stack、queue、list、set/multiset、map/multimap)

STL(Standard Template Library,标准模板库)


目录

一、STL 六大组件简介

二、 string容器

2.1 string容器基本概念

2.2 string 构造函数

2.3 string基本赋值操作

2.4 string存取字符操作

2.5 string拼接操作

2.6 string查找和替换

2.7 string比较操作

2.8 string子串

2.9 string插入和删除操作

2.10 string和c-style字符串转换

三、vector容器

3.1 vector构造函数

3.2 vector常用赋值操作

3.3 vector大小操作

3.4 vector数据存取操作

3.5 vector插入和删除操作

3.6 巧用swap,收缩内存空间

3.7 reserve预留空间

四、deque容器

4.1 deque容器实现原理

4.2 deque构造函数

4.3 deque赋值操作

4.4 deque大小操作

4.5 deque双端插入和删除操作

4.6 deque数据存取

4.7 deque插入操作

4.8 deque删除操作

五、stack容器

5.1stack构造函数

5.2 stack赋值操作

5.3 stack数据存取操作

5.4 stack大小操作

六、queue容器

6.1 queue构造函数

6.2 queue存取、插入和删除操作

6.3 queue赋值操作

6.4 queue大小操作

七、list容器

7.1 list构造函数

7.2 list数据元素插入和删除操作

7.3 list大小操作

7.4 list赋值操作

7.5 list数据的存取

7.6 list反转排序

八、set/multiset容器

8.1 set构造函数

8.2 set赋值操作

8.3 set大小操作

8.4 set插入和删除操作

8.5 set查找操作

8.6  对组(pair)

九、map/multimap容器

9.1 map构造函数

9.2 map赋值操作

9.3 map大小操作

9.4 map插入数据元素操作

9.5 map删除操作

9.6 map查找操作


 

一、STL 六大组件简介

 

STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。

  • 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。
  • 算法:各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function tempalte.
  • 迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator--等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针也是一种迭代器
  • 仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template
  • 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
  • 空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.

 

二、 string容器

2.1 string容器基本概念

C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件<string>。

String和c风格字符串对比:

  • Char*是一个指针,String是一个类

string封装了char*,管理这个字符串,是一个char*型的容器。

  • String封装了很多实用的成员方法

查找find,拷贝copy,删除delete 替换replace,插入insert

  • 不用考虑内存释放和越界

 string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。

 

2.2 string 构造函数

string();//创建一个空的字符串 例如: string str;     

string(const string& str);//使用一个string对象初始化另一个string对象

string(const char* s);//使用字符串s初始化

string(int n, char c);//使用n个字符c初始化

 

2.3 string基本赋值操作

string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串

string& operator=(const string &s);//把字符串s赋给当前的字符串

string& operator=(char c);//字符赋值给当前的字符串

string& assign(const char *s);//把字符串s赋给当前的字符串

string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串

string& assign(const string &s);//把字符串s赋给当前字符串

string& assign(int n, char c);//用n个字符c赋给当前字符串

string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串

 

2.4 string存取字符操作

char& operator[](int n);//通过[]方式取字符

char& at(int n);//通过at方法获取字符

 

2.5 string拼接操作

string& operator+=(const string& str);//重载+=操作符

string& operator+=(const char* str);//重载+=操作符

string& operator+=(const char c);//重载+=操作符

string& append(const char *s);//把字符串s连接到当前字符串结尾

string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾

string& append(const string &s);//同operator+=()

string& append(const string &s, int pos, int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾

string& append(int n, char c);//在当前字符串结尾添加n个字符c

 

2.6 string查找和替换

int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找

int find(const char* s, int pos = 0) const//查找s第一次出现位置,从pos开始查找

int find(const char* s, int pos, int n) const//从pos位置查找s的前n个字符第一次位置

int find(const char c, int pos = 0) const//查找字符c第一次出现位置

int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找

int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找

int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置

int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置

string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str

string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s

 

2.7 string比较操作

/*

compare函数在>时返回 1,<时返回 -1,==时返回 0。

比较区分大小写,比较时参考字典顺序,排越前面的越小。

大写的A比小写的a小。

*/

int compare(const string &s) const;//与字符串s比较

int compare(const char *s) const;//与字符串s比较

2.8 string子串

string substr(int pos = 0, int n = npos) const

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值