• 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库地址
    react简介
    es6 decorator
    es6 之 class
    es6之对象扩展
    vs code 默认浏览器
    不同环境查看是否可访问外网、访问网址、ip地址、外网ip地址
    httprunner2简单了解,httprunner可实现的功能,jmeter均可实现,所以,未深入学习
    结构化问答
    《大数的认识》
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/2654714.html
Copyright © 2020-2023  润新知