如何安全地将元素插入数组C 中

How to safely insert an element into an array c++?

本文关键字:插入 元素 数组 何安全 安全      更新时间:2023-10-16

我有一个简单的程序来添加一个元素:

void printArray(int inp[], int size)
{
    cout << "[";
    for (int i = 0; i < size - 1; i++)
    {
        cout << inp[i] << ", ";
    }
    cout << inp[size - 1] << "]" << endl;
}
int addElement(int inputArray[], int inputSize, int element, int atIndex)
{
    int cur = inputSize;
    while (cur >= 0)
    {
        if (cur == atIndex)
        {
            inputArray[cur] = element;
            return inputSize + 1;
        }
        inputArray[cur] = inputArray[cur - 1];
        cur--;
    }
    return inputSize + 1;
}

int arr1[] = {1, 5, 9, 2};
int arr2[] = {1, 5, 9, 2};
int main()
{
    int arraySize = sizeof(arr1) / sizeof(arr1[0]);
    addElement(arr1, arraySize, 7, 0);
    printArray(arr1, arraySize + 1);
    printArray(arr2, arraySize);
    return 0;
}

此输出:

[7,1,5,9,2]
[2,5,9,2]

即使我还没有触摸 arr2,也经过了修改。我认为,因为arr1arr2在内存中分配了连续分配,并且天真地将元素添加到arr1覆盖arr2[0]

我应该如何处理这种情况并仅在未使用下一个空间时添加,否则将整个数组移至另一个位置?

您可以使用std::vector轻松实现此目标。它具有一种称为insert的方法,您只需通过一个位置和一个数字作为参数,它将单独处理重新分配。

例如:如果写:

vector<int> vec = { 1, 2, 3, 4, 5 };
vec.insert(vec.begin() + 2, 100);

现在,您的向量中的元素为1、2、100、3、4、5。

我不知道这是否对您有帮助,但是您也可以一次添加多个元素:

vector<int> vec = { 1, 2, 3, 4, 5 };
vec.insert(vec.begin() + 3, { 100, 101 });

现在您的向量中的元素是: 1, 2, 3, 100, 101, 4, 5

您可以看到,第一个参数是第一个插入元素的位置,第二个参数是要插入的元素或元素列表。

您可以在此处阅读有关std::vector的更多信息,以及有关std::vector::insert的信息

希望这会有所帮助。

作为@storyteller提到的评论,您可以使用std :: vector。

,但是您必须选择要使用的容器的哪个功能,有两种类型。

    在容器。这是基于迭代器的。
  1. :: push_back ,插入容器的背面/最后一个

您可以根据自己的目的使用其中的任何一个,只需确保 :: insert 您指向正确的位置(Wise)。

另外,从C 11开始,您可以使用 :: EMPLECE :: EMPLECE_BACK ,该可以构建和插入数据。您可以在

上找到更多

http://www.cplusplus.com/reference/Vector/Vector/

希望这会有所帮助。

我有一个简单的程序,可以在数组中添加一个元素:

不可能。阵列的大小在编译时固定。换句话说,

int arr1[] = {1, 5, 9, 2};

很像:

int arr1_1 = 1;
int arr1_2 = 5;
int arr1_3 = 9;
int arr1_4 = 2;

我认为,对于学习目的,查看这样的阵列是有帮助的,而不像一个可以在程序运行时缩小和增长的容器。在运行时添加元素就像要求在运行时添加变量一样。C 数组无法正常工作。

you can 使用new[]在运行时设置数组的初始大小,但即使如此,您也无法"添加"任何内容。实际上,不要使用new[]

访问cppreference.com,了解std::vector,然后从头开始重新学习所有内容。从页面底部的示例代码开始。