在 c++ 数组末尾添加一个值

Posted

技术标签:

【中文标题】在 c++ 数组末尾添加一个值【英文标题】:Adding one value at the end of c++ array 【发布时间】:2021-02-07 22:57:24 【问题描述】:

我想在 C++ 数组中再添加一个值,我有这段代码:

void print_array(int *array, int size)

    for (int i = 0; i < size; ++i)
    
        std::cout << array[i] << ' ';
    
    std::cout << '\n';


void add_to_array(int *array, int size, int value)

    int *newArr = new int[size + 1];
    memcpy(newArr, array, size * sizeof(int));
    delete[] array;
    array = newArr;
    array[size + 1] = value;


int main(int argc, char const *argv[])

    int *array = new int[10];
    array[0] = 0;
    array[1] = 1;
    array[2] = 2;
    array[3] = 3;
    array[4] = 4;
    array[5] = 5;
    array[6] = 6;
    array[7] = 7;
    array[8] = 8;
    array[9] = 9;
    print_array(array, 10);
    add_to_array(array, 10, 11);
    print_array(array, 11);

我运行它时没有收到任何错误,但输出非常奇怪:

0 1 2 3 4 5 6 7 8 9 
0 0 -307888112 32767 4 5 6 7 8 9 1041

任何想法我该如何正确地做到这一点?

我知道 stl 列表中的向量,但我不能使用它们,所以不建议这样做

【问题讨论】:

宁可使用std::vector&lt;int&gt; array(10);push_back() 在末尾添加元素。 【参考方案1】:

C++ 的函数参数是所传递内容的副本,更改它们不会影响所传递的内容。您应该使用引用来让函数更改传递的内容。

另请注意,现在新数组有size + 1 元素,最后一个元素的索引是size,而不是size + 1

固定代码:

void add_to_array(int *&array, int size, int value) // add & to make "array" a reference

    int *newArr = new int[size + 1];
    memcpy(newArr, array, size * sizeof(int));
    delete[] array;
    array = newArr;
    array[size] = value;

【讨论】:

肯定会更好,但是当我第二次打印时,第 10 位的值是 0,而不是函数中的 pessed 值。我可以在主要更改它。如何修复? @F.Hand 修复新元素的索引。

以上是关于在 c++ 数组末尾添加一个值的主要内容,如果未能解决你的问题,请参考以下文章

C++怎样将一个数插入到数组末尾?

js数组添加元素

js数组添加元素

js高级程序设计——数组方法总结

C++ - 将项目添加到排序数组的最快方法

js 操作方法