日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于VECTOR和DEQUE

發(fā)布時間:2024/9/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于VECTOR和DEQUE 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.cnblogs.com/ixnehc/archive/2008/09/02/1282356.html

?

?*.先說內部結構.vector就是一塊連續(xù)的內存,這塊連續(xù)的內存會隨著成員的添加而不斷的re-alloc,而且在重分配的時候,分配的內存的大小會 比實際需要的多一些,下次再添加成員時,就可以添加在這些多余的空間里,而不會導致每添加一個成員就需要重分配內存.vector封裝的是一塊連續(xù)的內 存,這是我最喜歡它的地方,因為可以把它的成員直接轉換成指針來進行訪問,很靈活. ? ???? *.deque可以根據(jù)一個索引進行隨機訪問,所以我一度也以為它內部有一塊連續(xù)的內存,直到有一次我真這么干的時候把程序搞當了.才意識到這個錯誤.deque內部應該是由很多定長的內存塊組成的鏈表,這是我猜的,因為似乎只有這種結構才能和它的表現(xiàn)相符. ? ???? *.往vector,deque里添加數(shù)據(jù)應該都是很快的吧,畢竟這是這兩個容器的賣點.這個我沒有具體測過. ? ???? *.vector的遍歷速度是很快的,應該是到極限了,不管你用iterator來遍歷還是用一個遞增的下標進行訪問,經(jīng)過編譯器的優(yōu)化都可以有最高的效率. ? ???? *.deque的遍歷速度也不慢,如果使用iterator來遍歷,可以有接近于vector的效率,但如果直接用遞增的下標進行遍歷,好像編譯器無法優(yōu)化至最高效率,好像慢一倍左右: ????? std::deque<int> buf; ????? std::deque<int>::iterator it; ????? int sum=0; ????? for (it=buf.begin();it!=buf.end();it++)? //這樣遍歷比較快 ??????????? sum+=*it; ????? for (int i=0;i<buf.size();i++)? //這樣遍歷比較慢 ??????????? sum+=buf[i]; ? ???? *.vector內部分配的內存是永不釋放的,即使你調用clear()也不會,這一點很不好,有誤導性.有可能一個vector只在瞬間需要很大的容 量,但大多數(shù)時間只需要很小的容量,結果卻是長時間的占用了很大的,沒有被使用到的內存.vector也沒有提供函數(shù)來釋放它內部的內存,不過有一個簡單 的辦法,前幾天在網(wǎng)上找到的: ???? i_math::vector<BYTE>buf; ???? buf.resize(100000);//分配了一塊至少100000 bytes的內存 ???? if (TRUE)//清空buf的內存 ???? { ?????????? i_math::vector<BYTE> t; ?????????? buf.swap(t);//把這塊內存交換到一個臨時的vector里去 ???? } ???? assert(buf.capacity()==0);//內存被清空了 ? ???? *.deque就不一樣了,deque永遠不會占用太多冗余的內存,你只需要把它resize()到一個你希望的大小,它會自動釋放掉那些被多余占用的內存 ? ???? *.vector還有一個不好的地方,當你往一個vector里添加一個成員的時候,所有指向這個vector的原來成員的指針就不能保證有效了,因為 vector會re-alloc內存.而deque不會,無論從前面還是后面添加新成員,舊的成員都不會移動位置,這一點有時候很有用. ? ???? 所以我覺得deque其實在很多地方都有優(yōu)勢,比起vector,它欠缺的就是內存不連續(xù),使用起來不夠靈活,但它對內存使用的更經(jīng)濟,而訪問的效率也比 vector慢不了太多,當然,它還能從前面快速插入刪除,這是壓倒性的優(yōu)勢.總之,deque是在關鍵時候能幫上忙的那種,平時可能還是vector更 好用一些. ? ???? 最后順便說說list,我一點也不喜歡list,幾乎沒怎么用過,往list里添加成員是很慢的(相對與vector,deque),好像每添加一個成員 都要分配一次內存,它的遍歷也很慢,好像就比map的遍歷快一點,不能隨機訪問.唯一的優(yōu)勢就是可以在容器中間插入刪除,不過我覺得都是可以用 vector/deque加上一些技巧解決的。反正我在程序里很少碰到過非用list不可的情況,也許是我寫的程序類型還不夠多吧呵呵. ?

總結

以上是生活随笔為你收集整理的关于VECTOR和DEQUE的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。