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

            導航

            隨筆分類

            隨筆檔案

            最新評論

            久久久午夜精品| 亚洲人AV永久一区二区三区久久| 无码专区久久综合久中文字幕 | 无码任你躁久久久久久老妇App| 国产精品久久婷婷六月丁香| 久久久久久久波多野结衣高潮| 亚洲狠狠婷婷综合久久久久| 日韩欧美亚洲综合久久影院d3| 一本久久综合亚洲鲁鲁五月天| 久久亚洲中文字幕精品有坂深雪| 93精91精品国产综合久久香蕉 | 日本免费一区二区久久人人澡 | 久久亚洲春色中文字幕久久久| 99久久综合狠狠综合久久| 久久99热这里只有精品66| 51久久夜色精品国产| 久久狠狠高潮亚洲精品| 久久伊人五月天论坛| 99久久中文字幕| 色偷偷久久一区二区三区| 久久精品免费大片国产大片 | 久久久久99这里有精品10| 99国产精品久久久久久久成人热| 久久久久久精品免费免费自慰| 精品久久人人妻人人做精品 | 国产亚洲精品自在久久| 成人综合久久精品色婷婷| 久久国产V一级毛多内射| 国产精品一久久香蕉国产线看观看 | 99久久精品免费看国产一区二区三区 | 久久人人爽爽爽人久久久| 亚洲精品第一综合99久久| 久久综合伊人77777| 久久久无码精品亚洲日韩软件| 97久久精品人人澡人人爽| 国产成人久久精品二区三区| 91精品观看91久久久久久| 2020最新久久久视精品爱| 精品久久久久久无码人妻蜜桃| 久久精品国产WWW456C0M| 久久成人18免费网站|