STL 迭代器

本文阐述了迭代器在标准模板库(STL)中的核心作用,将其比作连接容器与算法的桥梁,通过内嵌型别技术使算法能够独立于容器设计,同时详细解析了list迭代器的构造与实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.迭代器在SLT中的作用

        迭代器是一种抽象的概念,它即是容器中的游标,又像是一个桥梁,连接了容器与算法。它使得容器和算法可以分开,彼此独立设计。比如我们平时最长用的排序算法sort,算法本身并不知道容器内部的具体实现,那么他是如何获取和设置容器中的元素的呢?这便是迭代器在中间起了作用。

 

二.迭代器的构造

        因为每种容器的迭代器必须知道容器的一些实现细节,因此每种容器都有专属的迭代器,但其总体架构以及与容器相关联的方式相同,因此举一个list中迭代器实现的例子来进行说明。

2.1 list迭代器类图

     

2.2 list迭代器实现

     迭代器的实现代码实现不难看懂,此处不予详述,有兴趣的读者可以参照以上类图阅读源码。

2.3 如何得知迭代器所指类型

     当某个算法中要知道迭代器所指数据的类型该如何获取呢?迭代器是通过内嵌型别来实现的。其手法大概如下:

template<class T>
struct MyIter{
    typedef T value_type;
    // 构造函数及其它
};

template<class I>
void fun(I ite){
  typename I::value_type tmp;// 这样便可得知迭代器所指数据类型
                             // typename高速编译器这是一个型别,而非函数或变量
}

    更多的萃取技术将在博文《STL traits萃取》中说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值