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

            導航

            隨筆分類

            隨筆檔案

            最新評論

            久久精品免费观看| 国产精品久久久久无码av| 久久久久久久91精品免费观看| 亚洲国产精品综合久久网络| 午夜精品久久久久久久久| 免费观看成人久久网免费观看| 成人午夜精品久久久久久久小说| 久久中文字幕视频、最近更新 | 久久这里只有精品首页| 亚洲Av无码国产情品久久| 久久99热只有频精品8| 久久天天躁狠狠躁夜夜av浪潮| 伊人久久大香线焦AV综合影院| 日本免费久久久久久久网站| 亚洲午夜久久久影院| 久久se精品一区二区影院| 97久久超碰国产精品2021| 久久福利资源国产精品999| 久久精品国产99国产电影网 | 97超级碰碰碰碰久久久久| 久久精品免费一区二区| 99久久精品无码一区二区毛片| 亚洲AV日韩精品久久久久| 久久久久国产精品麻豆AR影院| 国产69精品久久久久777| 无码超乳爆乳中文字幕久久| 亚洲国产精品狼友中文久久久| 爱做久久久久久| 国产一区二区精品久久凹凸| 88久久精品无码一区二区毛片| 久久久国产精品亚洲一区| 精品国产乱码久久久久久1区2区| 久久久亚洲欧洲日产国码是AV| 一本综合久久国产二区| 亚洲国产成人久久精品99| 久久久久亚洲精品天堂久久久久久| 国产精品成人无码久久久久久| 久久亚洲综合色一区二区三区| 狠狠色综合久久久久尤物| 久久男人AV资源网站| 久久人人爽人人爽人人av东京热|