发出将值从一个数组传输到新数组的问题

时间:2016-02-11 03:39:14

标签: c++ arrays new-operator delete-operator

我正在尝试创建一个程序来填充一个初始化为2个元素值的数组,但让用户继续输入数字。当用户输入更多值时,程序应该创建一个包含2个元素持有者的新数组,将数字从初始数组传输到新数组,并删除旧数组。

一旦用户输入 -1 ,该程序应该对数组执行其他操作,我知道该怎么做,但是因为当我输入时输入没有停止 - 1 ,我还没有打扰那个部分。

说实话,我不知道我在这里做什么,因为我不熟悉 new delete 的概念。我确实有一些代码,但只是因为我得到了提示。

如果由我决定,我可能会试图用矢量来做这件事。

任何提示都将不胜感激。

#include <iostream>
using namespace std;

int main() {
    int *ptr;   //pointer to array
    int capacity = 2;   //capactity of array
    int size = 0;       //how many ints recorded in array
    ptr = new int[capacity];
    int tmp = 0;

    int *numArray = new int[capacity];

    for (int i = 0;; i++) {
        while (true) {
            cout << "Enter a number: ";
            int num;
            cin >> num;
            if (num == -1) break;
            if (size == capacity) {
                int *temp = new int[capacity + 2];
                capacity += 2;
                delete[] ptr;
                *ptr = tmp;
            }
            ptr[size == capacity] = num;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

你很亲密。但是有几个问题。

  1. 抛弃for循环。否则,当您从break循环while时,它会再次永久进入。

  2. 您需要增加size,否则size == capacity永远不会成真。

  3. 在调整数组大小时,您忘记实际复制值。

  4. 错误的作业*ptr = temp应为ptr = temp

  5. 使用布尔索引ptr[size == capacity] = num进行虚假数组赋值。也许将此与(2)ptr[size++] = num结合使用。

  6. 所有这一切:

    while (true)
    {
        cout << "Enter a number: ";
        int num;
        cin >> num;
        if (num == -1) break;
        if (size == capacity){
            int *temp = new int[capacity + 2];
            for( int i = 0; i < capacity; i++ ) temp[i] = ptr[i];
            capacity += 2;
            delete[]ptr;
            ptr = tmp;
        }
        ptr[size++] = num;
    }
    

答案 1 :(得分:0)

首先,建议您使用char数组。你可以使用memcpy。下面的代码假设您一次读取一个int。

int *temp = new int[capacity + 2];
memcpy ( tmp, ptr, capacity );
temp[capacity + 1] = num;
capacity += 2;