王小明学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