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

  • 相关阅读:
    JS通过组装key值访问json对象中的值
    js属性对象的hasOwnProperty方法
    ES6 去掉已经 new Date().format 方法
    Ajax不能接受php return值的原因
    CentOS最常用命令及快捷键整理
    js中for循环中需要调用异步方法,怎么确保执行的顺序?
    MYSQL 更新字段,向字段追加字符串
    java-学习2
    java-学习1
    JS----贪吃蛇游戏
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/2654714.html
Copyright © 2011-2022 走看看