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

            導航

            隨筆分類

            隨筆檔案

            最新評論

            77777亚洲午夜久久多喷| 91亚洲国产成人久久精品网址| 欧美午夜A∨大片久久| 久久精品国产第一区二区三区| 欧美与黑人午夜性猛交久久久| 精品久久久久久无码中文野结衣 | 亚洲国产天堂久久久久久| 久久精品a亚洲国产v高清不卡| 国产亚洲精久久久久久无码| 午夜精品久久久久久毛片| 亚洲精品NV久久久久久久久久| 久久久女人与动物群交毛片| 国产精品伦理久久久久久| 久久99热精品| 久久精品一区二区国产| 一级A毛片免费观看久久精品| 国内精品久久久久久久97牛牛| 国内精品久久久久久久coent| 天堂久久天堂AV色综合| 久久精品国产欧美日韩99热| 国产一区二区久久久| 欧美亚洲国产精品久久久久| 久久夜色精品国产亚洲| 亚洲精品国产字幕久久不卡| 久久精品无码一区二区app| 欧美午夜A∨大片久久| 亚洲国产精久久久久久久| 亚洲综合熟女久久久30p| 久久国产精品无码一区二区三区| 热RE99久久精品国产66热| 久久亚洲精品视频| 欧美伊香蕉久久综合类网站| 国内精品九九久久久精品| 久久亚洲精品无码AV红樱桃| 亚洲欧美日韩精品久久| 狠狠色丁香婷综合久久| 久久96国产精品久久久| 日本精品久久久久中文字幕| 99久久国产综合精品五月天喷水| 久久免费视频观看| 精品国产乱码久久久久久浪潮|