一维阵列的操作

时间:2010-09-21 17:40:59

标签: c++

如何插入和删除1-D数组的元素 例如:
假设数组为:1 3 4 2 5
我们想在3和4之间插入7,以便新数组为:1 3 7 4 2 5

4 个答案:

答案 0 :(得分:7)

使用std::vector而不是C风格的数组。

使用insert插入并erase删除元素。

答案 1 :(得分:5)

当您想要插入或删除元素时,数组不是很容易处理。您必须手动将数据向前复制1个位置以插入1个元素以使新插槽可用。

为了减少您的工作量,您可以使用STL向量:

#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

答案 2 :(得分: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

答案 3 :(得分:0)

你不能用C ++中的数组做到这一点 - 你必须重新分配数组并移动元素。请改用std::vectorinsert方法:

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可以类似的方式用于删除项目。