[英]Vector erase function not working properly
我正在嘗試hackerrank上的練習題之一。
我知道有更好的方法來做到這一點,但我想知道為什么這種方法不能更好地理解它。
矢量擦除功能似乎按預期工作,直到最后幾次,然后在錯誤的索引處擦除,即使沒有任何變化。
調試器輸出:
1, 1, 3, 1, 2, 1, 3, 3, 3, 3, //當前在向量中的是什么
Delete indx 0 & 1 //我將擦除的第一對並遞增計數
3, 1, 2, 1, 3, 3, 3, 3, //繼續...
刪除索引 0 & 4
1, 2, 1, 3, 3, 3,
刪除索引 0 & 2
2, 3, 3, 3,
Delete indx 1 & 2 //表示刪除前三個和后三個
3, 3, //看起來第0個和其他一些索引被刪除了
刪除索引 0 & 1
返回的計數為:5
如果我可以添加到這個問題以使其更好,請告訴我,謝謝
int i, count = 0;
for (i=0;i<ar.size()-1;i++)
{
for (int j=i+1;j<ar.size();j++)
{
if (ar[i] == ar[j])
{
ar.erase(ar.begin()+i-1);
ar.erase(ar.begin()+j-1);
count++;
i=-1;
break;
}
}
if (ar.size()== 0)
break;
}
據我了解,您只需要對的數量(考慮到刪除)。
for(int i = 0; i < ar.size() - 1; i++){
for(int j = i + 1; j < ar.size(); j++){
if(ar[i] == ar[j]) {
ar.erase( ar.begin() + j );
count++;
break;
}
}
}
這樣您只需要執行 1 次擦除調用(這很慢,考慮到它將已刪除元素 1 插槽右側的所有元素向左移動)。
如果你有大向量,也不要一直使用ar.size()
(至少在j
循環中,因為在i
循環中它是必不可少的)。 嘗試for(int j = i + 1, len = ar.size(); j < len; j++)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.