Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 附加到动态内存中的数组_C++_Arrays_Dynamic Memory Allocation - Fatal编程技术网

C++ 附加到动态内存中的数组

C++ 附加到动态内存中的数组,c++,arrays,dynamic-memory-allocation,C++,Arrays,Dynamic Memory Allocation,使用动态内存,我试图创建一个在动态数组中存储数字的类,这样123将是arr[0]=1,arr[1]=2,arr[2]=3,并且能够附加数字,例如,如果存储的数字是123,则可以添加更多数字。。新号码是12345 到目前为止,我的代码是:我将如何制作一个附加函数 #include "stdafx.h" #include <iostream> using namespace std; int main() { int *exampleArray; //new array in

使用动态内存,我试图创建一个在动态数组中存储数字的类,这样123将是arr[0]=1,arr[1]=2,arr[2]=3,并且能够附加数字,例如,如果存储的数字是123,则可以添加更多数字。。新号码是12345

到目前为止,我的代码是:我将如何制作一个附加函数

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    int *exampleArray; //new array into exsistence 

    exampleArray = new int[5]; // dynamically allocates an array of 5 ints
    for (int i = 1; i < 5; i++)
    {
        exampleArray[i] = i;
        cout << exampleArray[i] << endl;
    }

    delete exampleArray; // deleted from exsistence

    system("pause"); // to show the output
    return 0;
}

如果使用new[]分配数组,则向其追加的唯一方法是向new[]添加一个较大的新数组,将旧数组中的现有值复制到该数组中,然后删除[]而不是删除旧数组,并更新数组指针以指向新数组

另外,请注意数组是0索引的。您的循环未使用任何数据填充exampleArray[0]

例如:

int *arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

...

int *newarr = new int[5];
std::copy(arr, arr+3, newarr);
newarr[3] = 4;
newarr[4] = 5;
delete[] arr;
arr = newarr;

...

delete[] arr;
int *arr = NULL;
int num = 0, cap = 0;

void append(int digit)
{
    if (num == cap)
    {
        int *newarr = new int[cap + 10];
        std::copy(arr, arr+num, newarr);
        delete[] arr;
        arr = newarr;
        cap += 10;
    }

    arr[num] = digit;
    ++num;
}

...

append(1);
append(2);
append(3);

...

append(4);
append(5);

...

delete[] arr;
std::vector<int> arr;

void append(int digit)
{
    arr.push_back(digit);
}

...

append(1);
append(2);
append(3);

...

append(4);
append(5);

...
您可以通过预先分配超出实际需要的内存来对此进行一些优化,并且只有在实际超出该内存时才会增长。例如:

int *arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

...

int *newarr = new int[5];
std::copy(arr, arr+3, newarr);
newarr[3] = 4;
newarr[4] = 5;
delete[] arr;
arr = newarr;

...

delete[] arr;
int *arr = NULL;
int num = 0, cap = 0;

void append(int digit)
{
    if (num == cap)
    {
        int *newarr = new int[cap + 10];
        std::copy(arr, arr+num, newarr);
        delete[] arr;
        arr = newarr;
        cap += 10;
    }

    arr[num] = digit;
    ++num;
}

...

append(1);
append(2);
append(3);

...

append(4);
append(5);

...

delete[] arr;
std::vector<int> arr;

void append(int digit)
{
    arr.push_back(digit);
}

...

append(1);
append(2);
append(3);

...

append(4);
append(5);

...
也就是说,你所要求的最好是用它来处理。它是一个动态长度容器,可以为您处理这些丑陋的细节

例如:

int *arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

...

int *newarr = new int[5];
std::copy(arr, arr+3, newarr);
newarr[3] = 4;
newarr[4] = 5;
delete[] arr;
arr = newarr;

...

delete[] arr;
int *arr = NULL;
int num = 0, cap = 0;

void append(int digit)
{
    if (num == cap)
    {
        int *newarr = new int[cap + 10];
        std::copy(arr, arr+num, newarr);
        delete[] arr;
        arr = newarr;
        cap += 10;
    }

    arr[num] = digit;
    ++num;
}

...

append(1);
append(2);
append(3);

...

append(4);
append(5);

...

delete[] arr;
std::vector<int> arr;

void append(int digit)
{
    arr.push_back(digit);
}

...

append(1);
append(2);
append(3);

...

append(4);
append(5);

...

一个不需要使用STD::vector容器或任何其他指针的替代方案是使用CSTDLIB C++头中的MalOC/RealOC/自由函数族如下:

int *exampleArray;
exampleArray = (int *) malloc(5 * sizeof(int));
for (int i = 1; i < 5; i++)
{
   exampleArray[i] = i;
   cout << exampleArray[i] << endl;
}
// Now to add further elements
exampleArray = (int *) realloc(7 * sizeof(int)); // Added space for 2 new elements
for (int i = 5; i < 7; i++) {
   exampleArray[i] = i;
   cout << exampleArray[i] << endl;
}
free(exampleArray);

你说的附加是什么意思?您打算在哪里添加数字?考虑检查当前分配的大小是否足够,然后调整大小并复制阵列。或者更好-使用std::vector而不是dynamic int arrayYou也必须使用。不能保证额外的内存分配会在原始数组的末尾分配内存。那么使用std::vector呢??扩展或附加到数组的过程是动态分配一个新的较大数组;2将旧元素复制到新数组中;3删除旧数组。我们中的许多人更喜欢使用std::vector,这对我们来说很有用。您应该在答案的更突出部分保留重点或移动上面的std::vector部分。@user0042:我的答案,我的选择,不是您的。在提供更好的建议之前,我更愿意向人们解释事情是如何在他们显示的代码范围内工作的。@Remy Fair!