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

            導航

            隨筆分類

            隨筆檔案

            最新評論

            亚洲国产精品久久久天堂| 99久久国产综合精品女同图片| 久久婷婷人人澡人人爽人人爱| 久久综合久久综合亚洲| 国产精品久久久久久久app| 色偷偷88888欧美精品久久久| 久久99精品久久久久久hb无码| 国产免费久久精品丫丫| 亚洲精品WWW久久久久久| 99久久中文字幕| 久久福利资源国产精品999| 久久精品视频网| 国产aⅴ激情无码久久| 国产成人久久777777| 久久亚洲精精品中文字幕| 久久久久久无码国产精品中文字幕 | 国产91久久综合| 久久婷婷国产综合精品| 久久综合亚洲色HEZYO国产| 久久不见久久见免费视频7| 亚洲人成电影网站久久| 94久久国产乱子伦精品免费| 亚洲欧美日韩中文久久| 亚洲欧美精品一区久久中文字幕| AV无码久久久久不卡网站下载 | 亚洲精品无码久久一线| 久久精品国产精品亚洲人人 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久婷婷五月亚洲97号色| 狠狠色丁香婷婷综合久久来来去| 久久久久久国产精品美女 | 久久国产热精品波多野结衣AV| 久久亚洲AV成人无码软件| 亚洲国产成人精品无码久久久久久综合| 国产一级持黄大片99久久| 久久不见久久见免费视频7| 少妇精品久久久一区二区三区| 伊人色综合久久天天网| 麻豆久久久9性大片| 狠狠色婷婷久久综合频道日韩| 久久91精品国产91久|