将值添加到动态数组中

Adding values to dynamic array

本文关键字:数组 动态 添加      更新时间:2023-10-16

所以我有此代码,但是它没有输出,在添加第4个值后,它是正确的,就像所有这些都被删除了,直到下一个运行

#include <iostream>
using namespace std;
const int DEFAULT_CAPACITY = 2;
void addValue(int data[], int& logSize, int& physSize, int newValue)
{
    // DATA DICTIONARY
    int *temp;
    if (logSize == physSize)
    {
        physSize *= 2;
        temp = new int[physSize];
        for (int i = 0; i <= logSize; i++)
        {
            temp[i] = data[i];
            cout<<temp[i]<<endl;
        }
        delete [] data;
        data = temp;
    }
    data[logSize] = newValue;
    for (int i = 0; i <= logSize; i++)
    {
        cout<<data[i]<<endl;
    }
    logSize++;
}
void printData(int data[], int logSize)
{
    cout<<endl;
    cout<<"ARRAY DATA:"<<endl;
    for (int i = 0; i < logSize; i++)
    {
        cout<<data[i]<<endl;
    }
}
void main()
{
    //DATA DICTIONARY
    int *data;
    int logSize;
    int physSize;
    int newValue;
    char choice;
    physSize = DEFAULT_CAPACITY;
    logSize = 0;
    data = new int[physSize];
    do
    {
        cout<<"What would you like to do?"<<endl;
        cout<<"(A)dd value to array"<<endl;
        cout<<"(D)isplay all values"<<endl;
        cout<<"(Q)uit"<<endl;
        cin>>choice;
        if (choice == 'A' || choice == 'a')
        {
            cout<<"What integer do you want to add? ";
            cin>>newValue;
            addValue(data, logSize, physSize, newValue);
        }
        if (choice == 'D' || choice == 'd')
        {
            printData(data, logSize);
        }
        cout<<endl;
    } while (choice != 'Q' && choice != 'q');
}

您可以并且应该使用 std::vector<int>的事实,data以value 作为指针传递:

void addValue(int data[], int& logSize, int& physSize, int newValue)

(对于int data[],读取int* data)。因此,`addValue具有自己的指针副本,无论它与其所做的一切对呼叫者没有影响。您可以通过参考传递指针来解决此特定问题:

void addValue(int*& data, int& logSize, int& physSize, int newValue)

通过参考通过data。您正在按价值传递。