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

            導航

            隨筆分類

            隨筆檔案

            最新評論

            久久青青草原国产精品免费| 奇米综合四色77777久久| 日韩精品国产自在久久现线拍| 国产精品久久成人影院| 狠狠人妻久久久久久综合蜜桃| 久久久99精品成人片中文字幕 | 亚洲精品美女久久久久99小说 | 精品久久亚洲中文无码| 久久777国产线看观看精品| 久久精品国产亚洲av麻豆图片| 久久久久亚洲AV无码永不| 国产精品99久久久久久宅男| 中文字幕无码免费久久| 久久93精品国产91久久综合| 国产成人精品综合久久久久| 久久久久亚洲AV无码去区首| 久久亚洲精品中文字幕三区| 久久精品卫校国产小美女| 久久国产精品二国产精品| 精品久久久久久亚洲| 久久精品亚洲AV久久久无码| 欧美精品丝袜久久久中文字幕 | 国产精品久久久久9999| 久久伊人五月天论坛| 99久久99久久精品国产片| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久综合综合久久97色| 久久精品人妻中文系列| 国产三级观看久久| 国产免费福利体检区久久| 中文字幕成人精品久久不卡| 久久成人国产精品二三区| 国产精品99精品久久免费| 国产日韩久久久精品影院首页| 天天爽天天爽天天片a久久网| 热re99久久6国产精品免费| 国产成人无码精品久久久性色| 青青热久久国产久精品 | 久久亚洲中文字幕精品有坂深雪 | 性欧美丰满熟妇XXXX性久久久| 思思久久好好热精品国产|