各位,今天調試一個程序時發現了一個奇怪的現象(盡量把代碼寫出來方便大家復制去自己機子上調試)://首先我建立了一個int型的vector容器并初始化為: 1 1 2 2 3 3 4 4 5 5 vector<int> v_int;for(vector<int>::size_type i=1;i<=5;++i){v_int.push_back(i);v_int.push_back(i);}//然后再將容器size擴展為15,并在末尾加入5個值為3的元素v_int.resize(15,3);//最后,問題來了:vector<int>::iterator end_unique;end_unique = unique(v_int.begin(),v_int.end());//篩選出無重復的序列v_int.erase(end_unique,v_int.end());//擦除剩余重復元素for(iter=v_int.begin();iter!=v_int.end();)//輸出{cout <<*iter++<<" ";}輸出的序列竟然不是期望的1 2 3 4 5,而是1 2 3 4 5 3??!也就是說,unique函數沒有把重復的那個元素3去除掉本來正常情況下,如果調用unique后不erase剩下那些重復的元素,序列應該是這樣的:1 2 3 4 5 3 4 4 5 5 3 3 3 3 3 (無重復的序列為1 2 3 4 5)而unique_end應該指向超出無重復元素范圍的下一位置,也就是第六個元素3但是如果你cout<<*unique_end會驚奇地發現居然是指向4??!而且更神奇的是,如果在一開始初始化v_int時增多或減少一條v_int.push_back(i)語句,也就是把序列改為1 2 3 4 5 3 3 3 3 3 或1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 3 3 3 3 3那么輸出就沒有任何問題了,都是1 2 3 4 5(后面不會奇怪地多出個3)糾結了我一個早上啊TMD,百思不得其解
求大蝦指點啊是這個unique函數本身的BUG還是我程序設計哪里出了問題?
慕婉清6462132
2023-03-03 16:12:18