• <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>

            GLORY | 學習·記錄

            coding for life

            危險的vector::erase

             1 #include<iostream>
             2 #include<vector>
             3 using namespace std;
             4 
             5 int main()
             6 {
             7     vector<int> a;
             8     a.push_back(1);
             9     a.push_back(2);
            10     a.push_back(3);
            11     a.push_back(4);
            12     a.push_back(5);
            13     
            14     vector<int>::iterator pos=a.begin()+2;
            15     vector<int>::iterator temp=pos+1;
            16     cout<<"temp now is"<<*temp<<endl;
            17     
            18     a.erase(pos);
            19     
            20     cout<<"temp now is"<<*temp<<endl;
            21     
            22     system("pause");
            23     return 0;
            24 }

            今天在用STL寫約瑟夫問題的時候,發現vector的行為總是產生詭異的結果,讓我百思不得其解。

            看上面代碼:
            一個vector里面有1到5,總共5個元素。把一個迭代器pos指向第三個元素3,另外一個temp指向第四個元素4,然后調用erase把第三個元素抹掉。
            注意,在這個時候繼續解引用temp的時候,會發現它指向的元素神奇的變成了5。

            問題就處在erase上面,在C++ Reference上面寫道:
            Because vectors keep an array format, erasing on positions other than the vector end also moves all the elements after the segment erased to their new positions, which may not be a method as efficient as erasing in other kinds of sequence containers (deque, list).

            This invalidates all iterator and references to elements after position or first.

            刪除vector一個元素,導致它后面的元素全部移動到新的位置,所以導致這個元素之后的所有迭代器都失效。


            在使用一個函數前應該對它的行為有清楚的了解。謹記。

            posted on 2011-03-11 15:41 meglory 閱讀(361) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            導航

            隨筆分類

            隨筆檔案

            最新評論

            久久精品国产清高在天天线| 亚洲七七久久精品中文国产| 国产亚洲美女精品久久久久狼| 好久久免费视频高清| 欧美性猛交xxxx免费看久久久| 亚洲乱码精品久久久久..| 亚洲天堂久久精品| 性做久久久久久久| 久久亚洲国产精品123区| 国内精品久久久久久久97牛牛| 久久久久99精品成人片三人毛片 | 国产免费久久精品99久久| 日韩电影久久久被窝网| 热99re久久国超精品首页| 欧美黑人激情性久久| 久久久久久噜噜精品免费直播| 久久国产亚洲精品无码| 久久大香萑太香蕉av| 久久久久久久亚洲精品| 国产欧美一区二区久久| 精品永久久福利一区二区| 久久人人爽人人爽人人片AV东京热| 9999国产精品欧美久久久久久| 国产人久久人人人人爽| 国产偷久久久精品专区| 国产免费久久精品99re丫y| 久久久中文字幕日本| 久久婷婷五月综合色99啪ak | 精品久久久久久久国产潘金莲 | 精品国产一区二区三区久久蜜臀 | 久久香综合精品久久伊人| 欧美粉嫩小泬久久久久久久| 国产69精品久久久久99| 伊人久久综在合线亚洲2019| 2020最新久久久视精品爱| 久久99精品久久久久久9蜜桃| 一本伊大人香蕉久久网手机| 精品无码久久久久久久久久| 久久久久久国产精品美女| 四虎影视久久久免费观看| 国产成人综合久久精品红|