王小明学STL2

  “大叔!你骗我。”王小明找上了大叔,愤愤不平。

  “我怎么骗你了?”大叔正无聊地翻着一本早被翻烂的书。

  “你骗我用STL,我去网上查了,很多人都说STL慢!慢的很”

  “你是怎么知道他慢的?”

  “你昨天不是教我用vector吗?我回去用数组和它比较了一下,发现比数组插入的速度慢了好多!”

  “你是怎么试验的?”

  “你看,我是这样写的。”说着,王小明就在草稿纸上写起来。

    int array1[10000];
    int i;
    for (i=0; i<10000; i++)
    {
        array[i] = i;
    }
    vector<int> array2;
    for (i=0; i<10000; i++)
    {
        array2.push_back(i);
    }

  “插入的数越多,速度的差别就越明显!”

  这时大叔却笑了,“你知道vector是怎么工作的吗?”

  “当然知道啊,它也是个数组,但是如果插入的数据超出原来的范围,它就会重新……”小明好像想起点什么。

  “那你觉得浪费的时间都花在哪里?”

  “对了,它总是要重新申请内存,还要复制数据!”小明终于领悟到了。

  “是的,但是它也不是一味地申请和复制,每次申请也不只是申请都一个位置,而是申请更多的内存,避免总是需要申请。”

  “啊,这样子它还有什么优势啊,浪费好多时间啊!”小明不甘心,“我以后再也不用它了。”

  “咦,怎么这么说。你也可以把它当数组用,它还更安全呢。你看看下面这种。”

    vector<int> array(10000);

  “这是什么!难道……”小明看到自己没用过这方法感到很惊奇。

  “没错,这种申请方式,就是告诉它,我先把你当做一个10000长度的数组来用。”

  “这样它的初始内存就有10000了对吧?也就是说,10000之内就不用重新申请了。”

  “嗯,是的。而且如果你不小心操作出错,也是比数组安全多了。”

  “这样啊……”小明又领悟到了vector的魅力,“那我继续用它好了!”

  “呵呵,对了,你的vector学习的怎样了?”

  “我昨天查了一下,发现他有一个方法是pop_back。”

  大叔想了想,“这样吧,你知道数据结构里的栈是什么东西吗?”

  “栈……”小明摸摸头,好像老师教过,但是现在怎么忘了,“诶……我家里有点事我先回去了,待会再来……”

  于是小明又跑回家了,大叔看着他的背景,只能无奈地笑了:-D

 

posted @ 2013-04-12 09:07  我是王小明  阅读(199)  评论(2编辑  收藏  举报