• <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久久| 香蕉久久夜色精品国产2020| A级毛片无码久久精品免费| 精品久久久久久久国产潘金莲| 久久噜噜久久久精品66| 一本大道久久香蕉成人网| 人妻无码αv中文字幕久久琪琪布| 久久久老熟女一区二区三区| 国产亚州精品女人久久久久久| 久久五月精品中文字幕| 熟妇人妻久久中文字幕| 欧美久久久久久精选9999| 久久香蕉国产线看观看精品yw| 国产精品99久久不卡| 99久久精品免费看国产一区二区三区 | 国产亚洲美女精品久久久2020| 国产∨亚洲V天堂无码久久久| 久久99国产一区二区三区| 亚洲精品无码成人片久久| 国产午夜精品久久久久九九| 一本一本久久A久久综合精品 | 久久综合色区| 伊人久久免费视频| 国产精品久久午夜夜伦鲁鲁| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久精品国产亚洲av影院| 亚洲国产婷婷香蕉久久久久久| 国产91色综合久久免费| 97久久国产露脸精品国产| 热RE99久久精品国产66热| 99久久亚洲综合精品成人| 一本一本久久A久久综合精品 | 亚洲乱码中文字幕久久孕妇黑人 | 久久亚洲欧洲国产综合| 国产精品久久久久一区二区三区| 天堂久久天堂AV色综合| 精品久久久中文字幕人妻| 天天做夜夜做久久做狠狠| 久久亚洲视频| 久久久久无码精品| 欧美亚洲另类久久综合婷婷 |