如何插入和刪除一維陣列的元素。
用於離:
假設陣列是:1 3 4 2 5
我們要插入和4 7 3之間,以使新的數組是:1 3 7 4 2 5在一維陣列上的操作
1
A
回答
7
使用std::vector
代替一個C風格的數組。
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
可以以類似的方式來刪除項目。
相關問題
- 1. 在二維陣列上的操作
- 2. 多維PHP陣列操作
- 3. 應用實例的一維陣列上的操作在一行中,使用LINQ
- 4. 在陣列的一個特定維度執行操作
- 5. 在二維數組列上的操作
- 6. 2維陣列操縱
- 7. 五維矩陣操作
- 8. 從二維陣列到一維陣列?
- 9. 在R的陣列操作
- 10. 在陣列中的操作
- 11. 陣列操作
- 12. 陣列操作
- 13. 陣列操作
- 14. 在陣列上執行操作
- 15. 在陣列上操作元素
- 16. 使陣列上的.ransack(params [:q])操作
- 17. Java 8流和陣列上的操作
- 18. Javascript陣列元素上的操作
- 19. 在三維堆棧的每一層上執行二維操作
- 20. 操縱的ResultSet陣列,使其多維
- 21. 二維陣列在一個維度[1]
- 22. 在一個1個維陣列使用array_search多維陣列
- 23. VBA陣列操作
- 24. 多陣列操作
- 25. Javascript陣列操作
- 26. 操作主陣列
- 27. 陣列RGB操作
- 28. 如何向量化一個1個dimensionsal陣列上的操作,以產生2維矩陣中numpy的
- 29. 在多維陣列上的filter_input_array
- 30. Dijkstra在三維陣列上的算法
請問您可以給我簡單的循環和while循環的可能語法 – user451990 2010-09-21 17:43:24
@ user451990 - 本網站上有大量的STL向量迭代示例代碼。你可以跟蹤下來,而不是要求在這裏轉發嗎? – 2010-09-21 17:45:23
如果你的數組很大,像這樣插入就會變得很貴。在這種情況下考慮std :: list(constant-time insert/delete) – 2010-09-21 17:46:25