2010-09-21 95 views

回答

7

使用std::vector代替一個C風格的數組。

使用insert插入和erase刪除元素。

+0

請問您可以給我簡單的循環和while循環的可能語法 – user451990 2010-09-21 17:43:24

+4

@ user451990 - 本網站上有大量的STL向量迭代示例代碼。你可以跟蹤下來,而不是要求在這裏轉發嗎? – 2010-09-21 17:45:23

+2

如果你的數組很大,像這樣插入就會變得很貴。在這種情況下考慮std :: list(constant-time insert/delete) – 2010-09-21 17:46:25

5

當你想插入或移除一個元素時,數組並不是很容易處理。您將不得不手動將數據向前複製1個位置以插入1個元素以創建新的插槽。

以更少的工作,你這樣做,你可以使用STL的vector:

#include <vector> 

//... 

std::vector<int> v; 
v.push_back(1); 
v.push_back(3); 
v.push_back(4); 
v.push_back(2); 
v.push_back(5); 
v.insert(v.begin() + 2, 7); 
v.erase(v.begin());//Removing the first element just for fun 

即使有一個載體,雖然你仍然複製數據(只是透明地給你)。所以要最有效地做到這一點,你會使用std::list

#include <list> 

//... 

std::list<int> v; 
v.push_back(1); 
v.push_back(3); 
v.push_back(4); 
v.push_back(2); 
v.push_back(5); 
v.insert(++(++v.begin()), 7); 
v.erase(v.begin());//Removing the first element just for fun 
1

如果要插入的元素,然後使用列表會更合適 - 陣列是連續的內存塊,所以如果你想插入你所要做的工作的內容:

increase the size of the array 
for each element past the spot - move one element further back 
write new element at the target position 
0

你可以不要用C++中的數組來做這件事 - 你必須重新分配數組並移動元素。使用std::vector代替,而insert方法:

std::vector<int> v; 
v.push_back(1); 
v.push_back(3); 
v.push_back(4); 
v.push_back(2); 
v.push_back(5); 

// begin() yields an iterator to the first element; since it's a random-access 
// iterator we can offset to insert at index 2. 
v.insert(v.begin() + 2, 7); 

erase可以以類似的方式來刪除項目。