如何在C ++中删除/插入数组元素

时间:2012-08-06 09:49:37

标签: c++ c arrays visual-c++

所以第一个问题,我在这里有这个数组:

arr[] = {1; 2; 3; 4; 5}

如果我输入例如:3 第三个元素将被删除并替换为下一个值。 像这样:

arr[] = {1; 2; 4; 5}

我这里有这个代码:

for(int i = 2; i < n; i++)
{
    arr[i] = arr[i + 1];
    arr[n - 1] = 0;
}

但结果是

arr[] = {1; 2; 4; 0; 0}

请修改代码

第二个问题, 我会输入&#34; 3&#34;同样,但不是删除第三个元素并替换它,我必须插入一个新的第三个元素,即&#34; 50&#34;这样:

arr[] = {1; 2; 3; 4; 5}

将成为:

arr[] = {1; 2; 50; 3; 4; 5}

我仍然是编程和C ++的菜鸟,这是我的第一个问题所以请好好回答:D

非常感谢

7 个答案:

答案 0 :(得分:7)

不,该元素永远不会被“删除”。数组大小在编译时确定,并将被修复。

如果需要在运行时调整数组大小,请考虑改为使用std::vector

答案 1 :(得分:2)

第一个问题中的问题是你在for循环的每次迭代中都将数组的最后一个元素设置为0,所以在你的循环的第一次传递之后,它将是{1, 2, 4, 4, 0},next { {1}}。
简单地将{1, 2, 4, 0, 0}放出for循环就足够了。同样:
编辑:更新循环控制语句,因此它不会超出范围,谢谢hmjd

arr[n - 1] = 0;

该元素本身不会被删除,它只会被设置为0而其余元素将被移到左侧。

关于第二个问题:你必须创建一个更大尺寸的新阵列来添加任何东西 您需要的是for(int i = 2; i < n-1; i++) { arr[i] = arr[i + 1]; } arr[n - 1] = 0; malloccalloc函数。一般来说,熟悉它们和动态分配。一般的想法是freemalloc一个比当前数组大1的数组,将元素复制到要插入另一个元素的空间,插入一个然后复制其余元素数组。之后,不要忘记calloc旧数组并将其指向新数组。

free
为了简洁起见,

省略了分配检查 第一个问题可以使用类似的方法来改变数组的大小。

答案 2 :(得分:1)

移动

arr[n - 1] = 0; 

循环后获得1; 2; 4; 5; 0:

for(int i = 2; i < n - 1; i++)
    arr[i] = arr[i + 1];
arr[n - 1] = 0; 

答案 3 :(得分:1)

使用标准C ++库函数插入或删除数组元素并调整其大小。

用于在数组std::vector::insert

中插入元素

用于从数组std::vector::erase

中删除或删除元素

答案 4 :(得分:0)

arr[] = {1; 2; 3; 4; 5}将分配足够的内存来保存5(不少于,不多于)整数值。

当您在代码中移动元素时,您正在做的就是 - 转移。没有“记忆”被释放或添加这些操作;

如果你真的需要通过这种插入/删除操作来改变数组的大小,你将 分配一个适当大小的新数组,并将旧数组中的数据复制到那个新的(如果合适的话,记得释放第一个数组不再使用的内存)。

欢迎使用C ++,工程师负责管理资源(与许多脚本或其他“高级”语言不同)。

旁注:当你的第一个代码正在移动元素并在该内存块的末尾留下一个未使用的“尾部”时,第二个示例将访问超出分配给该数组的内存块的内存,导致内存访问违规(并且很可能是由任何体面的操作系统终止你的程序)

答案 5 :(得分:0)

如果您使用的是C ++,则可以使用标准模板库中的容器。您在代码示例中使用的数组是C样式数组。虽然在C ++代码中使用C风格的数组是完全可以接受的,但是使用say std :: vector要好得多,因为它可以在运行时调整数组大小方面提供更大的灵活性。在大多数coses中,C风格的数组和std :: vector之间的性能差异可以忽略不计。

答案 6 :(得分:0)

使用矢量

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

template<typename T>
void print(const vector<T> &v){
    typename vector<T>::const_iterator it;
    for(it=v.begin(); it!=v.end(); ++it)
        cout << *it << ' ';
    cout << endl;
}

int main (){
    const int arr[] = {1, 2, 3, 4, 5};
    const int size = sizeof(arr)/sizeof(int);

    vector<int> v(&arr[0], &arr[size]);

    v.erase(v.begin() + 2);
    print(v);//1 2 4 5

    v.insert(v.begin()+2, 3);
    print(v);//1 2 3 4 5
    v.insert(v.begin()+2, 50);
    print(v);//1 2 50 3 4 5
}