zoukankan      html  css  js  c++  java
  • STL源码剖析读书笔记第3章

    第3章  迭代器(iterator)

    迭代器,容器与算法分离的关键,STL的灵魂
    为了不过多暴露容器的内部细节,每个容器都封装了自己的迭代器。

    文中接着讲了一个例子,如何通过一个迭代器来获得这个迭代器所指对象的类型(value_type),有点像Java里的反射

     1 template <class I, class T>
     2 void func_imp1(I iter, T t)
     3 {
     4     T tmp;
     5     ... 
     6 }
     7 template <class I>
     8 inline
     9 void func(I iter)
    10 {
    11     func_imp1(iter, *iter);
    12 }

    这个设计还是十分巧妙的。但是这个方法并不是万能的。

    文中接着给出了另一个方法,并讲了traits机制,泛型与特化的一堆东西,很深奥,略过。

    并且描述了为什么需要多个特化的版本,从而为容器中不同的iterator做铺垫。后面有句话讲的很好。

    唯容器本身,才知道该设计出怎样的迭代器来遍历自己。

    traits编程技法大量运用与STL实现品中,它利用“内嵌类型”的编程技巧与编译器的template参数推导功能,

    增强C++未能提供的关于类型认证方面的能力,弥补了C++不是强类型(strong typed)语言的遗憾。

    关于traits,我只知道traits就是为了为某些特性而不破坏泛型而引入的东西。

    目前还没有找到特别好的例子。

    关于iterator,如果容器加了const限制,那么iterator调用也必须使用const_iterator

  • 相关阅读:
    vim中ctags应用
    LCD屏参数及应用举例
    modbus概述
    Modbus常用
    git常用操作
    linux内核学习
    截图工具gsnap
    信号signal编号及意义及一般处理
    oracle 表空间 数据文件 表的关系
    IBM MQ 2035 或 2013认证错误的解决方法
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/2654714.html
Copyright © 2011-2022 走看看