如何安全地将元素插入到数组c ++中?

时间:2017-12-10 08:57:29

标签: c++ arrays pointers

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

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]

如何处理这种情况并仅在下一个空格未使用时添加,否则将整个阵列移动到另一个位置?

3 个答案:

答案 0 :(得分: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 herestd::vector::insert here

希望这会有所帮助。

答案 1 :(得分:0)

正如@StoryTeller提到的评论,您可以使用std :: vector。

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

  1. :: insert ,在数据中的特定位置插入数据 容器。这是基于迭代器的。

  2. :: push_back ,插入容器的后面/末尾

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

    此外,从C ++ 11开始,您可以使用 :: emplace :: emplace_back 来构建和插入数据。您可以在

    找到更多信息

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

    希望这有帮助。

答案 2 :(得分:0)

  

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

不可能。数组的大小在编译时是固定的。换句话说,

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

很像:

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

我认为,出于学习目的,查看这样的数组是有帮助的,而不是像程序运行时可以缩小和增长的容器一样。在运行时向数组添加元素就像要求在运行时添加变量一样。 C ++数组不会那样工作。

可以使用new[]在运行时设置数组的初始大小,但即使这样,您也无法添加&#34;任何东西。事实上,永远不要使用new[]

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