STL知识点总结(一)


STL知识点总结(二)
C++学习总结: 快速跳转

1. STL

1.1 初识

  • 标准模板库(Standard Template Library,STL)
  • STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)
  • 容器和算法之间通过迭代器进行无缝连接
  • STL中几乎所有的代码都采用了**模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用**机会。

1.2 STL六大组件

容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

  • 容器:各种数据结构,如vector、list、deque、set等
  • 算法:各种常用的算法,sort、find、copy、for_each等
  • 迭代器:容器与算法之间的胶合剂
  • 仿函数:行为类似于函数,可用作为算法的某种策略
  • 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西
  • 空间适配器:负责空间的配置与管理

1.3 STL中的容器、算法、迭代器

1 . 容器

  • 将一些数据结构实现出来
  • 分为两种
    • 序列式容器:强调值得排序,每个元素中均有固定的位置
    • 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系
  1. 算法
  • 质变算法:指运算过程中会更改区间内的元素的内容。拷贝、删除、替换等
  • 非质变算法:运算中不会更改区间内的元素内容,查找、技术、遍历等
  1. 迭代器
  • 提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表述方式
  • 每个容器都有自己的专属迭代器(类似于指针)
  • 迭代器种类
种类 功能 支持运算
输入迭代器 只读 支持++、==、!=
输出迭代器 只读 支持++
前向迭代器 读写,并能向前推进迭代器 支持++、==、!=
双向迭代器 读写,并能向前和向后操作 支持++、–
随机访问迭代器 读写 ,可以跳跃访问任何数据,功能最强 支持++、–、[n]、-n、<、<=、>、>=

常用的容器中迭代器种类为双向迭代器,和随机访问迭代器

2. 常用容器

2.1 string 容器

2.1.1 基本概念

  • string是C++风格的字符串,本质上是一个
  • string与char*的区别
    • char* 是一个指针
    • string是一个类,内部封装了char*,管理字符串,是一个char*型的容器
  • 特点
    • 类内封装了很多成员方法
    • 例如:查找find,拷贝copy,删除delete 替换replace,插入inser
    • string管理char*所分配的内存,不用担心复制越界和取值越界,由类内部进行负责

2.1.2 string的构造函数

函数原型:

  • string(); //创建一个字符空串,string str;
  • string(const char* s); //使用字符串s初始化
  • string(const string& str); //使用一个string对象初始化
  • string(int n,char c); //使用n个字符初始化
#include <string>//要包含的头文件
//创建空字符串,调用无参构造
string s1;
//使用字符串初始化
const char* str = "hi  baby!!!";
string s2(str);
//使用一个string对象初始化
string s3(s2);
//使用n个字符初始化
string s4(10,'b');

2.1.3 赋值操作

函数原型 说明
string& operator=(const char* s) char*类型字符串,赋值给当前字符串
string& operator=(const string &s) 字符串s赋值给当前字符串
string& operator=(char c) 字符赋值给当前字符串
string& assign(const char* s) 字符串赋值给当前字符串
string& assign(const string& s) 字符串s赋值给当前字符串
string& assign(const char* s,int n) 字符串前n个字符赋值给当前字符串
string& assign(int n,char c) n个字符c赋值给当前字符串

operator=比较实用

const char*s = "hello,baby!!!";
string s1 = s;
string s2 = s1;
string s3 = 'c';

string s4;
s4.assign(s);
s4.assign("hello",2);
s4.assign(s1);
s4.assign(3,'a');

2.1.4 字符串拼接

函数原型 说明
string& operator+=(const char* s) 重载+=操作符
string& operator+=(const string &s) 重载+=操作符
string& operator+=(char c) 重载+=操作符
string& append(const char* s) 字符串s连接到当前字符串结尾
string& append(const string& s)
string& append(const char* s,int n) 字符串前n个字符连接到当前字符串结尾
string& append(const string& s,int pos,int n) 字符串s中从pos开始的n个字符连接到当前字符串结尾
string s1 = "hello";
s1 += "world";
s1 += ':';
string s2 = "!!!";
s1 += s2;
cout << s1 << endl;

string s3 = "I";
s3.append(" love ");
s3.append("youahdhdjjdjdjd",3);
s3.append(str1,1,4);

2.1.5 查找与替换

函数原型 说明
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
  • find查找是从左往后,rfind从右往左
  • find找到字符串后返回查找的第一个字符位置,找不到返回-1
  • replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串
string str;
str.find(参数);
str.
  • 15
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值