46 C++基础-STL迭代器和算法介绍

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值