c++ - 问题将值从一个数组转移到一个新数组

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

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

一旦用户输入-1,程序应该用数组做其他事情,我知道该怎么做,但是因为当我输入时输入没有停止- 1,我只是还没有理会那部分。

老实说,我不知道我在这里做什么,因为我对新建删除 的概念还很陌生。我确实有一些代码,但只是因为我得到了提示。

如果由我来决定,我可能会尝试使用 vector 来做到这一点。

如有任何提示,我们将不胜感激。

#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;
        }
    }
}

最佳答案

你很接近。但是有几个问题。

  1. 放弃 for 循环。否则,当您从 while 循环中break 时,它只会永远再次进入。

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

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

  4. 错误的分配 *ptr = temp 应该是 ptr = temp

  5. 使用 bool 索引 ptr[size == capacity] = num 的伪数组赋值。也许将它与 (2) 结合起来并执行 ptr[size++] = num

所有这一切:

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;
}

关于c++ - 问题将值从一个数组转移到一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330360/

相关文章:

java - JAVA 为堆栈上的对象而不是堆上的对象预分配内存

c++ - Linux 上的 Chilitags 编译

c++ - 在 OSX 上构建巨大的 C++ 源代码时出现 LLVM Clang 6.0 fatal error

c++ - 为数组赋值时是否存在性能差异

java - 从 txt 文件中读取整数并存储到数组中

java - SimpleXML 枚举区分大小写

c++ - Arduino: union 中的结构顺序

php - 无法为 OS X 10.9.5 安装 Sphinx : '"/lib/cpp"fails sanity check'

java - 其他方法的一维阵列频率计数器

c++ - 使用 g++ 编译 C++ 程序时体系结构 x86_64 的 undefined symbol