c++ - 向动态数组添加值

标签 c++ dynamic-arrays

所以我有这段代码,但它没有输出,在添加第 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在此处作为指针按值传递:

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)

关于c++ - 向动态数组添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21473784/

相关文章:

c - C 中的动态数组函数 - 设置容量并创建更大的数组

c++ - 查找 DLL 的 CLR 版本

c - 如何在C中正确实现动态数组

c++ - 在我的主类中使用动态数组时出错

C++在循环中实例化模板

c - 获取 void* 的大小以创建一个简单的通用动态分配数组 - C

Java:可调整大小的数组列表不会保持平行

java - 从Java学C++,尝试做一个链表

C++ 稀疏矩阵容器

c++ - 我可以传递给 std::thread::sleep_for() 和 sleep_until() 的最大值是多少?