试图动态增加数组大小

时间:2016-11-08 10:51:53

标签: c++ arrays

我正在开发一个程序,用户不断输入数字,保存到数组中,当数组已满时,我正在尝试将原始数组复制到新数组中并继续填充该数组但是我不能让它工作。这是我到目前为止的代码

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main()
{
    int size;
        cout << "Please enter how many numbers you want to enter: ";
    cin >> size; 
    double *array = new double*[size];
    cout << "Please enter your numbers: ";
    for(int i = 0; i < size; i++) {
        cin >> array[i];
        if(i == size-1) {
            int newSize = 2*size;
            double *arrayb = new double*[newSize];
            for(int i = 0;i<size;i++) {
                arrayb[i] = array[i];
            }
            delete [] array;
            array = arrayb;
            size = newSize;
        }
    }   
}

3 个答案:

答案 0 :(得分:1)

如果在执行之前不知道集合的最大大小,则需要避免使用数组。就像TartanLlama所说,你可以使用std :: vector。 Vector允许您根据需要添加项目。 但是有很多容器具有不同的访问方法。请参阅此链接,了解如何选择容器的第一个视图: In which scenario do I use a particular STL container?

答案 1 :(得分:0)

我可以通过使双指针指向双精度而不是双指针数组来编译它

int size;
cout << "Please enter how many numbers you want to enter: ";
cin >> size; 
double *array = new double[size];
//                        ^--- not pointers to doubles
cout << "Please enter your numbers: ";
for(int i = 0; i < size; i++) {
    cin >> array[i];
    if(i == size-1) {
        int newSize = 2*size;
        double *arrayb = new double[newSize];
        //                         ^--- not pointers
        for(int i = 0;i<size;i++) {
            arrayb[i] = array[i];
        }
        delete [] array;
        array = arrayb;
        size = newSize;
    }
} 

您已在第一个新数据中分配了足够的内存。 BUT 当你在size的当前值结束之前到达时,你分配的空间加倍。并制作size = newSize。 外部for循环永远不会结束,除非抛出异常,例如最终必然会发生的bad::alloc

答案 2 :(得分:0)

如果您阅读了编译错误,您将会看到问题:

g++ -std=c++17 -fPIC -g -Wall -Wextra -Wwrite-strings -Wno-parentheses -Wpedantic -Warray-bounds -O2 -Weffc++      14226370.cpp    -o 14226370
14226370.cpp: In function ‘int main()’:
14226370.cpp:11:37: error: cannot convert ‘double**’ to ‘double*’ in initialization
     double *array = new double*[size];
                                     ^
14226370.cpp:17:49: error: cannot convert ‘double**’ to ‘double*’ in initialization
             double *arrayb = new double*[newSize];

在这两种情况下,您正在创建一个指针数组,以便加倍并尝试将单个指针初始化为double。

看看你使用这些的方式,你可能想写new double[size]new double[newSize]