什么是STL?
STL (standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,更是一个包罗数据结构与算法的软件框架。
STL包含六大组件:容器、仿函数、算法、迭代器、空间配置器、配接器。
STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。
迭代器(itorator)
是一种设计模式(元素访问的一种设计模式),所有容器都需要遵循相同的设计规范。好处就在于每个容器的迭代器使用规范都是一样的。例如usb接口,虽然生产厂家不一样但都可以通用,因为是一个设计模式。
迭代器使用与指针类似
设计模式:
正向
begin迭代器:指向第一个元素的位置
end迭代器:指向最后一个元素的下一位置
反向
rbegin迭代器:指向最后一个元素的位置
rend迭代器:指向第一个元素的前一个位置
支持通过*和—>解引用来访问数据
支持++/–操作移动元素位置
支持!= 判断元素
分为const(可读)和非const(可读可写)
string s2 = "123456";
//获取到迭代器
string::iterator it = s2.begin();
for(; it!=s2.end(); it++){
cout << *it << " ";
*it='a';//通过迭代器对内容进行修改
}
//反向输出
string s3 = "abcdef";
string::reverse_iterator rit = s3.rbegin();
for (; rit != s3.rend(); rit++){
//++是反向的 向前移动
cout << *rit << " ";
}
支持迭代器访问的自定义类型都可以使用范围for
之前学过对于范围确定的序列可以用范围for来遍历(如数组),其实范围for就是基于迭代器实现的,如果这个类当中有迭代器,就可以使用范围for。
string s = "abcdef";
int arr[] = {
1, 2, 3, 4, 5 };
for (const auto& e : arr){
cout << e << " ";
}
cout <<