1.迭代器
迭代器提供对一个容器的对象的访问方法。迭代器就如同一个指针。事实上,c++的指针也是一种迭代器,但是迭代器不仅仅是指针
除了使用下标来访问 vector 对象外,标准库还提供了另一种访问元素的方法:使用迭代器。迭代器是一种检查容器内元素并遍历元素的数据类型
标准库为每一种标准容器定义了一种迭代器类。迭代器类型提供了比下标操作更加通用化的方法。所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。
1.1 iterator 类型
每个标准库容器都定义了一个名为iterator的成员,用来定义自己的迭代器
- vector :: iterator iter;
- list :: iterator iter;
1.2 begin 和 end 操作
- begin 返回迭代器指向的第一个元素
vector :: iterator iter = ivec.begin()
- end 操作返回的迭代器自学vectord的末端
vector :: iterator iter = ivec.end()
1.3 迭代器的自增和解引用运算
*iter = 0;
1.4 迭代器的遍历容器
for (vector<string> :: iterator iter = ivec.begin(); iter != ivec.end(); ++iter) {
std::cout<<*iter<<std::endl;
}
1.5 const_iterator
每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器的元素,不能进行修改
当我们队普通的 iterator 类型进行解引用时,得到某个元素的非const,而如果我们对const_iterator类型进行解引用时,则可以得到一个指向const对象的引用。
1.5.1 区分const_iterator 和 const 的iterator
声明一个const迭代器时,必须初始化迭代器,一旦初始化,就不能改变
vecotr<int> nums(10);
const vecotr<int>::iterator cit = nums.egin();
*cit = 1; // 不能改变元素值
++cit;
1.6 增量操作符
iter + n 指针位置移动的偏移量
1.6 迭代器的失效
2. 算法
STL定义了一组泛型的算法,例如排序与搜索,定义在algorithm.h
2.1 只读算法
只会读取某个范围的元素,不会改变元素
vector<int>:: iterator iter = find(vec.begin, vec.end(), 20);
2.2修改容器元素的算法
// 将 vec.begin() ~ vec.begin()范围内初始化为0
fill(vec.begin(), vec.end(), 0)
2.3 重排容器元素的算法
sort(vec.begin(), vec.end())
2.4 向算法传递函数
bool isHorter(int a, intb) {
return a < b;
}
sort(vec.begin(), vec.end(), isHorter)