青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

使用std::vector 的陷阱

在使用std的容器的時候,不少人喜歡用vector, 因為比起list,更省空間,而且可以根據(jù)index直接讀取某個值,而不用一個個枚舉來取.

但是,std::vector確實有一些值得注意的陷阱, 這里先說其中一個, 請看以下代碼.

std::vector< int >  values;

values.push_back(1);

values.push_back(2);

values.push_back(3);

values.erase(values.begin() + 1);

乍看之下,這幾行簡單的代碼沒什么 問題. 實際執(zhí)行起來, 還是沒什么問題 , 但卻有一個陷阱. 由于例子里面用的是intvector,所以這樣做沒有任何問題, ,假如不是一個int, 而是一個類,一個結(jié)構(gòu)體,類或結(jié)構(gòu)體里面還有指針, 那就很可能出問題了. why?

因為vector不象list,vector始終要保持一個完整的內(nèi)存結(jié)構(gòu)(因為就是一個數(shù)組),這樣才可以讓values[1]這樣的方式正確運行. 但是,如果要在vector中間刪掉一個成員的話,vector是這樣做的, 先把該成員后面的一個成員,一直到最后一個成員往前一位置拷貝,這樣需要刪除的成員已經(jīng)被后面的覆蓋了, 然后再刪除最后一個成員,這樣,vector又能保持一段完整的內(nèi)存結(jié)構(gòu)了注意,因為最后一個成員會被刪除,而如果這個成員里面有一個成員變量是指針, 那析構(gòu)函數(shù)很有可能會把這個指針指向的地方釋放掉這樣,即使最后一個成員被復(fù)制了一份 到倒數(shù)第2的位置,也因為在他本身被刪除的時候,把倒數(shù)第2(也就是它的復(fù)制) 的指針成員所指向的地方給釋放了! 如圖:

                      clip_image002

解決的辦法也很簡單, 最少有2. 1,  增加作為vector類型的類的拷貝構(gòu)造函數(shù), 因為vectorerase的時候會發(fā)生一次拷貝,讓拷貝構(gòu)造函數(shù)不單單是復(fù)制指針,還把指針所指向的內(nèi)容給拷貝一份,這樣就不會導(dǎo)致被最后一個成員釋放的時候一起釋放掉了. 2, 如果有引用記數(shù)的話,如智能指針, 就不會被釋放掉了。不過如果一般編碼里面不需要用到引用記數(shù)的話,還是方法1比較簡便

 

posted on 2009-09-02 22:36 肥仔 閱讀(7532) 評論(30)  編輯 收藏 引用 所屬分類: Boost & STL

評論

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

不明白為什么成員變量是指針就把指針所指的地方析構(gòu),是你的類實現(xiàn)的問題嗎?

int *p1 = new int(1);
int *p2 = p1;

vector< int* > ivec;
ivec.push_back(p1);
ivec.push_back(p2);

當我把vector中的p2 erase掉之后,p1所指無物?
2009-09-03 09:20 | nelson

# re: 使用std::vector 的陷阱[未登錄]  回復(fù)  更多評論   

其實我覺得這不是vector給你設(shè)的“陷阱”,STL容器只有責任維護你給他的東西,但沒理由維護這個東西里面的東西。不僅僅是vector,STL所有的容器如果按你這種思維去用,都會出問題:
class Test
{
int *a;
~Test()
{
delete a;
}
};
std::vector<Test> 維護Test::a其實應(yīng)該是你的責任。
2009-09-03 13:37 | Kevin Lynx

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

所有容器里面都應(yīng)該只存儲簡單數(shù)據(jù)結(jié)構(gòu),一旦數(shù)據(jù)結(jié)構(gòu)為復(fù)雜數(shù)據(jù)結(jié)構(gòu)時,則應(yīng)該存儲該數(shù)據(jù)的指針。
2009-09-15 16:55 | davidfan

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

Last time I downloaded the mp ringtones with the help of the <a href="http://www.milliontones.com">ringtones</a> site and used to be completely satisfied.
2010-06-24 17:54 | ConnerThelma30

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

I think that you really know how not easy could the custom term paper creating be. But, you shouldn’t be confused, simply because the term paper writing services present the do my essay papers and there’s no problem to buy custom writing services and be satisfied.
2010-09-28 17:58 | buy essays cheap

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

Frequently, that is better to buy essays, particularly if you do not have an opportunity to compose even an easy academic task.
2010-12-10 20:13 | custom essays

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

Excellent post. I was checking continuously this blog and I'm impressed! Very useful information specifically the last part :) I care for such info a lot. I was looking for this certain information for a very long time. Thank you and good luck.
2013-10-03 07:48 | have a peek here

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

I do not even understand how I stopped up here, but I assumed this publish used to be good. I don't realize who you might be but certainly you're going to a well-known blogger if you aren't already ;) Cheers!
2013-10-22 17:32 | agen bola

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

I like the valuable info you provide in your articles. I'll bookmark your weblog and check again here frequently. I'm quite certain I'll learn a lot of new stuff right here! Best of luck for the next!
2013-11-08 10:14 | Navigate Here

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

但沒理由維護這個東西里面的東西。不僅僅是vector,所有的容器如果按你這種思維去用,都會出問題 為復(fù)雜數(shù)據(jù)結(jié)構(gòu)時,則應(yīng)該存儲該數(shù)據(jù)
2014-09-10 21:40 | Agen Tangkas

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

果按你這種思維去用,都會出問題 為復(fù)雜數(shù)據(jù)結(jié)構(gòu)時,則應(yīng)該

http://uefa88.net
2014-09-10 21:42 | Agen Tangkas Terpercaya

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

實應(yīng)該是你的責任。的容器如果按你員變量是指針就把指針所指的地方析構(gòu)

http://www.sidikjaritermurah.com
2014-09-10 21:44 | Mesin Absensi Sidik Jari

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

一旦數(shù)據(jù)結(jié)構(gòu)為復(fù)雜數(shù)據(jù)結(jié)構(gòu)時,則應(yīng)該存儲該數(shù)據(jù)的指針。

http://multibet88.org
2014-10-16 03:22 | judi online

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

http://agent108.org
2014-10-16 16:16 | judi bola

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

則應(yīng)該存儲該數(shù)據(jù)的指針。

http://homebet88.com
2014-10-16 16:18 | agen bola terpercaya

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

都會出問題 為復(fù)雜數(shù) http://citibet88.com
2014-10-16 16:18 | taruhan bola

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

一旦數(shù)據(jù)結(jié)構(gòu)為復(fù)雜數(shù)據(jù)結(jié)構(gòu)時 http://speedbet88.com
2014-10-16 16:19 | agen bola

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

但沒理由維護這個東西里面的東西。所有的容器如果按你這種思維去用,則應(yīng)該存儲該數(shù)據(jù) http://www.speedbet88.biz
2014-10-25 03:24 | agen bola

# # re: 使用std::vector 的陷阱 回復(fù) 更多評論   回復(fù)  更多評論   

我們的<a代理href="http://agent108.org">朱迪·博拉網(wǎng)</A>最好的,最大的,最可靠的agent108 - 給促銷獎金10萬每存款將獲得5%的獎金
存取速度非常快,馬上加入我們的行列。
2014-10-28 17:30 | milestone

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

但沒理由維護這個東西里面的東西。所有的容器如果按你這種思維去用,則應(yīng)該存儲該數(shù)據(jù) http://www.citibet88.com
2014-10-29 18:03 | taruhan bola

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

很不錯的博客,謝謝分享這個非常有趣的信息。保持成功
2014-11-18 22:03 | sbobet online

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

但沒理由維護這個東西里面的東西。所有的容器如果按你這種思維去用,則應(yīng)該存儲該數(shù)據(jù)
2014-11-20 20:51 | agen bola terpercaya

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

www.on303.com adalah agen judi bola terpercaya di indonesia , dengan customer service yang ramah siap membantu anda semua.
2015-07-14 13:42 | judi bola

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

この記事では、読者のために非常に良いと便利です。知識の共有をありがとうございました
2016-02-18 11:12 | obat penggugur kandungan

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

私のような初心者のための読書の多くを必要とし、様々なブログ上の情報を検索します。あなたはとても素敵を共有し、私を鼓舞し、記事
2016-03-18 10:30 | cara menggugurkan kandungan

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

容器只有責任維護你給他的東西,但沒理由維護這個東西里面的東西。不僅僅是vector,STL所有的容器如果按你這種思維去用
2016-04-22 13:26 | Cara Menggugurkan Kandungan

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

如果有引用記數(shù)的話,如智能指針, 就不會被釋放掉了。不過如果一般編碼里面不需要用到引用記數(shù)的話,還是方法1比較簡便
2016-04-22 13:27 | Obat Penggugur Kandungan

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

Mate this is a very nice blog here. I wanted to comment & say that I enjoyed reading your posts & they are all very well written out. You make blogging look easy lol I’ll attemp to start a blog later today and I hope it’s half as good as your blog! Much success to you!
2016-06-13 20:18 | Dr.Aborsi Kandungan

# re: 使用std::vector 的陷阱  回復(fù)  更多評論   

I would like to start a pressure group of Australian authors whose purpose is to remind the buyers at Council Libraries that one of their functions is to support and nurture Australian Literature.
2016-06-16 11:14 | klinik apotik24
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品乱码久久久久久黑人 | 久久久人人人| 欧美1区2区3区| 亚洲精品一区在线观看| 欧美日本中文字幕| 午夜国产不卡在线观看视频| 久久亚洲综合色| 999亚洲国产精| 国产精品久久亚洲7777| 久久精品五月婷婷| 日韩视频免费观看高清完整版| 午夜一区在线| 亚洲人成网站777色婷婷| 欧美午夜免费电影| 久色成人在线| 亚洲在线成人精品| 亚洲高清av| 欧美一区午夜精品| 亚洲精品免费在线播放| 国产精品自在线| 欧美高清在线观看| 欧美一区二区三区男人的天堂| 欧美韩国日本一区| 久久国产夜色精品鲁鲁99| 91久久久久| 国模叶桐国产精品一区| 欧美日韩国产小视频| 欧美在线国产精品| 99视频精品全国免费| 免费永久网站黄欧美| 亚洲欧美日韩国产一区| 亚洲国产精品久久久久久女王| 国产精品视频九色porn| 欧美精品97| 久久夜色精品国产噜噜av| 亚洲午夜免费视频| 亚洲精品综合久久中文字幕| 免费成人av资源网| 欧美在线观看视频在线 | 亚洲影院在线| 日韩网站在线看片你懂的| 国内精品视频在线播放| 国产精品推荐精品| 国产精品高精视频免费| 欧美日韩另类视频| 欧美福利电影网| 久久午夜精品一区二区| 欧美主播一区二区三区美女 久久精品人| 99精品欧美一区二区蜜桃免费| 亚洲国产精品精华液网站| 免费看的黄色欧美网站| 久久久久久久尹人综合网亚洲| 午夜久久一区| 午夜久久黄色| 欧美一级免费视频| 午夜精品久久久久| 欧美亚洲一级片| 久久成人免费网| 欧美中文字幕| 久久嫩草精品久久久精品一| 久久成人在线| 久久精品国产亚洲一区二区| 欧美一区二区免费| 久久精品欧洲| 久久影视精品| 欧美大片91| 亚洲电影欧美电影有声小说| 欧美激情五月| 亚洲毛片在线看| 中文日韩在线| 亚洲在线免费观看| 欧美在线国产精品| 久久另类ts人妖一区二区| 久久只有精品| 欧美日韩1区2区| 国产精品三级视频| 国产在线视频欧美| 亚洲国内自拍| 宅男噜噜噜66一区二区| 午夜久久久久久| 老司机亚洲精品| 亚洲国产乱码最新视频| 日韩视频免费观看| 午夜在线a亚洲v天堂网2018| 久久精品亚洲一区二区| 免费影视亚洲| 国产精品超碰97尤物18| 国产午夜精品全部视频在线播放| 国模精品一区二区三区色天香| 亚洲二区视频在线| 亚洲天堂av图片| 久久精品99久久香蕉国产色戒| 免费在线看成人av| 日韩视频在线一区| 欧美一区二区私人影院日本| 免费国产自线拍一欧美视频| 欧美日韩理论| 极品少妇一区二区三区精品视频 | 久久综合色8888| 亚洲人成久久| 性欧美超级视频| 欧美精品一区二区精品网| 国产精品久久久久久久久免费樱桃| 国产在线精品一区二区中文| 亚洲精品美女91| 久久福利电影| 亚洲人成77777在线观看网| 午夜欧美不卡精品aaaaa| 免费成人av| 国产亚洲欧美aaaa| 一卡二卡3卡四卡高清精品视频| 欧美亚洲在线播放| 亚洲精品小视频在线观看| 欧美一区中文字幕| 欧美香蕉视频| 亚洲经典在线看| 久久久久国产精品一区二区| 日韩视频在线观看| 六月婷婷一区| 国产一区欧美| 亚洲欧美日韩成人高清在线一区| 欧美激情二区三区| 欧美中文字幕在线观看| 欧美四级剧情无删版影片| 亚洲国产成人精品久久久国产成人一区| 亚洲一区二区在| 最新日韩中文字幕| 媚黑女一区二区| 黄色精品一区| 久久精品三级| 亚洲在线一区| 国产精品成人在线| 一区二区国产在线观看| 欧美成ee人免费视频| 久久成人一区| 国产片一区二区| 性欧美xxxx大乳国产app| 日韩一级黄色片| 欧美日韩国产123区| 亚洲精品国产精品乱码不99| 美女精品网站| 久久精品日产第一区二区三区| 国产精品综合不卡av| 亚洲综合色噜噜狠狠| 日韩网站免费观看| 欧美日韩中文字幕日韩欧美| 日韩天堂av| 亚洲日韩欧美一区二区在线| 欧美成人午夜| 亚洲精品美女久久久久| 亚洲黄色av| 欧美日韩福利在线观看| 一本色道久久88综合亚洲精品ⅰ | 一区二区三区日韩欧美| 欧美日韩调教| 亚洲制服av| 亚洲午夜久久久久久久久电影网| 欧美午夜一区二区福利视频| 一区二区三区日韩| 亚洲一级黄色片| 国产免费成人在线视频| 久久精品一区蜜桃臀影院| 欧美一区2区三区4区公司二百 | 亚洲国产精品尤物yw在线观看| 狂野欧美一区| 日韩写真视频在线观看| 99国产精品久久久久久久久久| 欧美日韩中文在线观看| 午夜精品视频网站| 欧美一级在线亚洲天堂| 亚洲福利一区| 亚洲全部视频| 国产精品天天看| 久热精品视频在线观看| 美日韩精品视频| 亚洲一区bb| 欧美一级二级三级蜜桃| 亚洲第一在线综合网站| 91久久国产综合久久91精品网站| 欧美日韩亚洲天堂| 久久精品一区二区三区不卡牛牛 | 欧美风情在线观看| 欧美日韩国产成人在线免费| 亚洲欧美一区二区原创| 欧美在线播放一区| 亚洲欧洲一区二区在线播放| 99re66热这里只有精品4| 国产欧美一区二区三区国产幕精品 | 国产精品扒开腿爽爽爽视频| 久久gogo国模啪啪人体图| 久久在线视频在线| 亚洲一二三区在线| 久久精品成人欧美大片古装| 亚洲另类在线一区| 午夜精品久久久久久99热| 亚洲国产一二三| 亚洲一区二区在线视频| 亚洲黄一区二区三区| 亚洲综合日韩在线| 亚洲精品免费一二三区|