我正在C++中使用動態分配的數組構建一個簡單的列表。我有一個功能remove(int item)
應刪除列表中出現的所有item
。但是,如果我做一個循環,迭代從0
到陣列中length
,我擔心我會超過我的數組的邊界,因爲length
變化我刪除項目:循環迭代在C++
int List::pop(int index)
{
int retval = data[index];
for (int i = index; i < length; i++)
data[i] = data[i+1];
length--;
return retval;
}
void List::remove(int item)
{
for (int i = 0; i < length; i++) {
if (data[i] == item)
pop(i);
}
所以,如果我叫remove(6)
在array[6][4][2][6][1][3][5][6]
上,C++會更新remove()
中的for
循環,更新後的值爲length
後pop()
?或者它會保持原來傳遞給它的相同的值,當調用remove()
時?
所以我想簡單一點來說,在這種情況下是C++調用值還是調用引用? – Andrew 2011-04-01 04:03:32
該算法具有O(N^2)性能,因爲即使有多個項目副本,pop()也會一次一步地複製其餘值。通過保留「打包」數據的索引並直接複製'!= item'元素,您可以輕鬆獲得單次O(N)解決方案。 – 2011-04-01 04:32:59