• <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 閱讀(357) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            導航

            隨筆分類

            隨筆檔案

            最新評論

            一本久久久久久久| 精品久久久久香蕉网| 欧美一区二区精品久久| 99久久婷婷国产综合精品草原| 久久精品九九亚洲精品天堂| 国产精品一区二区久久精品无码| 久久久久亚洲精品日久生情| 久久久久亚洲AV无码永不| 久久久久国产亚洲AV麻豆| 日本WV一本一道久久香蕉| 久久电影网一区| 亚洲国产精品无码久久青草 | 久久久精品日本一区二区三区| 热久久国产欧美一区二区精品| 久久99国产综合精品女同| 91精品国产91久久久久久青草 | 麻豆一区二区99久久久久| 久久夜色撩人精品国产小说| 国产精品免费福利久久| 久久精品国产只有精品66| 久久亚洲美女精品国产精品| 午夜精品久久久久久久无码| 波多野结衣中文字幕久久| 一本一道久久综合狠狠老| 久久人人爽人人爽人人片AV不 | 国内精品久久久久影院免费| 亚洲国产成人久久综合一区77 | 日本福利片国产午夜久久| 国产成人精品久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久精品国产一区二区电影| 国产精品美女久久久久网| 久久婷婷久久一区二区三区| 伊人久久大香线焦AV综合影院| 久久中文字幕视频、最近更新| 伊人久久综合热线大杳蕉下载| 久久精品九九亚洲精品天堂| 久久精品aⅴ无码中文字字幕不卡| 久久久久青草线蕉综合超碰| 久久精品国产男包| 久久久久亚洲AV成人片|