侯老师--STL源码剖析--书中的疑问一

原创 2001年11月15日 11:47:00

侯老师--STL源码剖析--书中的疑问一<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

前言

我在看侯捷的STL源码剖析一书中第一章Class的语法和语意(第30页)看到了如下的伪代码,我认为是有错误的,因为代码中在没有初始化迭代子的情况下使用。代码如下:

状态8:__STL_MEMBER_TEMPLATES

#include <iostream>

using namespace std;

class alloc{

};

 

template <class T,class Alloc=alloc>

class vector{

public:

    typedef T value_type;

    typedef value_type* iterator;

 

    template <class I>

    void insert(iterator position, I first, I last)

{

        cout<<"insert()"<<endl;

    }

};

 

int main()

{

int ia[5] = {0,1,2,3,4};

vector<int> x;

vector<int>::iterator ite;

x.insert(ite, ia, ia+5);    //insert()

}

    代码中加黑的行出现错误,当编译运行时出错,当然得把iterator和vector用STL库中iterator和vector声明来替换。还有主函式没有返回值。替换后代码如下:

替换后代码

#include <iostream>

#include <vector>

 

using namespace std;

 

int main()

{

int ia[5] = {0,1,2,3,4};

vector<int> x;

vector<int>::iterator ite;

x.insert(ite, ia, ia+5);    //insert()

retrun 0;

}

 

    出错的原因是在定义ite时没有初始化ite。当调用此型insert函式时(当然调用insert(int value)不会出错,它不使用ite),它认为正确初始化了ite(ite此时为无效值,因为没有初始化),所以当它向ite所指向的内存存放数据时出现非法访问。当你在声明vector<int>::iterator ite时进行了正确的初始化就不会出错了。

vector<int>::iterator ite = x.begin();

    书写此文可能有小题大作之嫌,这里指的错误是不初始化指针,但在本例子没有出现非法访问,因为它根本就没有使用ite。但是当我实际应用时,一定要注意初始化,千万不要以为侯老师这么写,就照搬抄写,那你一定会后悔的。作者只是重在语义,也可能是我理解错误。总之,此文仅供参考,如有错误还望来信指正,在下感激不尽。

 

    致谢!

                                                                袁凯

                                                             2001-11-09 

 

侯老师--STL源码剖析--书中的疑问三

 侯老师--STL源码剖析--书中的疑问三前言我在看侯捷的STL源码剖析一书中”第二章2.2具备次配置力(sub-allocation)的SGI空间配置器(第47页)看到了如下的代码,我认为是有错误的...
  • winmain
  • winmain
  • 2001年11月15日 11:31
  • 776

侯老师--STL源码剖析--书中的疑问二

 侯老师--STL源码剖析--书中的错误二前言我在看侯捷的STL源码剖析一书中”第二章设计一个阳春的空间配置器JJ::allocator(第45页)看到了如下的伪代码,我认为是有错误的,代码如下:命名...
  • winmain
  • winmain
  • 2001年11月16日 10:04
  • 919

《stl源码剖析》剖析

这段时间,重读了侯捷先生的《stl源码剖析》,感受跟第一次读还是有不一样的。有些以前比较难以理解的点,现在能轻松看懂。两次读下来,感觉自己对stl整体模块开始有了粗浅的认识。下面请允许我说下对stl粗...
  • Alex_ti20705
  • Alex_ti20705
  • 2015年11月08日 22:40
  • 390

《STL源码剖析》总结

 转载自 :http://blog.csdn.net/liguohanhaha/article/details/52089914 1、STL概述 STL提供六大组件,彼此可以组合套用: ...
  • shenya1314
  • shenya1314
  • 2017年02月08日 10:13
  • 1127

STL源码剖析 读书总结

> 侯捷著 很早就买了这本书, 一直没看, 现在在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法.  看之前我对于泛型编程了解甚少, STL倒使用的比较...
  • xuzhezhaozhao
  • xuzhezhaozhao
  • 2014年10月21日 15:29
  • 1447

《STL源码剖析》学习笔记

第二章:空间配置器(allocator) 考虑到小型区块可能造成的内存破碎问题,SGI设计了双层级配置器。 当配置区块超过128bytes时,便调用第一级配置器,即直接使用malloc() free(...
  • qiaominghe
  • qiaominghe
  • 2016年05月27日 09:05
  • 1609

读《STL 源码剖析》及感悟

买这本书有一段时间了,断断续续的,我对这方面的兴趣也不是特别大,很早之前看过了《深入实践C++ 模板编程》、《深入理解C++11 :C++11 新特性解析与应用》,而且,经过这两年的工作时间使用C++...
  • cloudqiu
  • cloudqiu
  • 2017年03月22日 00:37
  • 798

侯捷《STL源码剖析》--STL学习笔记

这是我看了《STL源码剖析》之后的一些个人的看法,因为要消化某一个东西,最好的方法就是写下自己的看法和理解。再经过时间的积累,就会慢慢积累到你对真正意义的掌握。这是我的第一个比较正式一点学习笔记,以前...
  • qeizi
  • qeizi
  • 2004年03月08日 10:01
  • 1881

《STL源码剖析》Sort排序分析

整体而言: sort算法在数据量大时采用Quick Sort(快速排序),一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负担,就改用Insertion Sort(插...
  • m0_37316917
  • m0_37316917
  • 2017年04月02日 19:30
  • 453

STL 源码分析之萃取器

在STL中迭代器控制算法,算法操作容器。但是,泛型编程中算法并不知道迭代器传递给他的是什么样的类型,所以在迭代器和算法之间需要一个东西来分配类型。这东西就是萃取器。这是一种编程的技法。下面上图后直接上...
  • qq_21441793
  • qq_21441793
  • 2018年01月25日 19:55
  • 20
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:侯老师--STL源码剖析--书中的疑问一
举报原因:
原因补充:

(最多只允许输入30个字)