STL基础笔记
目录
STL称为标准模板库(Standard Template Library) 广义上可以分为容器,算法,迭代器 容器和算法通过迭代器进行无缝连接 STL几乎所有的代码都采用了函数模版或者类模板
1 STL分类
序号 | 名称 | 解释 |
---|---|---|
1 | 容器 | 各种数据结构 |
2 | 算法 | 各种常用的算法 |
3 | 迭代器 | 容器域算法的胶合 |
4 | 仿函数 | 行为类似函数 |
5 | 适配器 | 修饰容器或者仿函数迭代器 |
6 | 空间配置器 | 负责空间的配置和管理 |
2 容器
2.1 vector
2.1.1 vector使用
/* 创建vector容器 */
vector<int> v;
/* 插入数据 */
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
2.1.2 迭代器使用
2.1.2.1 迭代器方案1
vector<int>::iterator itBegin = v.begin();
vector<int>::iterator itEnd = v.end();
while (itBegin != itEnd) {
cout << *itBegin << endl;
itBegin += 1;
}
2.1.2.2 迭代器2
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
2.1.2.3 遍历算法
template <class T>
void myPrint(T val)
{
cout << val << endl;
}
/* 可惜回调函数不支持自动推导 */
for_each(v.begin(), v.end(), myPrint<int>);
2.1.3 容器自定义数据
2.1.4 容器嵌套容器
vector<vector<int>>v; // 外部大容器
vector<int> vx[10]; // 内部小容器
/* 插入容器 */
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 30; j++)
{
vx[i].push_back(i + j + 10);
}
v.push_back(vx[i]);
}
/* 遍历容器 */
for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
{
for (vector<int>::iterator vit = it->begin(); vit != it->end(); vit++)
{
cout << *vit << " ";
}
cout << endl;
}
2.2 string
string本质上是一个类,封装了char*,提供了许多的成员方法;
2.2.1 构造函数
string s1(str);
string s2 = "Hello World";
string s3(s2);
2.3 赋值操作
- 重载操作符**=**
string s1;
s1 = "Hello World";
- 成员函数assign
string str;
str.assign("Hello World");
2.4 追加操作
- 重载操作符**+=**
- 成员函数append
2.5 查找和替换
2.5.1 find
2.5.2 replace
2.6 比较
2.6.1 compare
2.7 字符存取
- []
- at