C++ 问题:将值从一个数组传输到新数组

C++ 问题:将值从一个数组传输到新数组,c++,arrays,new-operator,delete-operator,C++,Arrays,New Operator,Delete Operator,我正在尝试创建一个程序,它将填充一个初始化为2个元素值的数组,但允许用户继续输入数字。当用户输入更多的值时,程序应该创建一个新的数组,再包含两个元素持有者,将数字从初始数组转移到新数组,并删除旧数组 一旦用户输入-1,程序就应该对数组执行其他操作,我知道怎么做,但是由于输入-1时输入没有停止,所以我还没有对这部分进行处理 老实说,我不知道我在这里做什么,因为我对“新建”和“删除”的概念还不熟悉。我确实有一些代码,但只是因为我得到了提示 如果由我决定的话,我可能会尝试用向量来做这件事 如有任何提示

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

一旦用户输入-1,程序就应该对数组执行其他操作,我知道怎么做,但是由于输入-1时输入没有停止,所以我还没有对这部分进行处理

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

如果由我决定的话,我可能会尝试用向量来做这件事

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

#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;
        }
    }
}
#包括
使用名称空间std;
int main(){
int*ptr;//指向数组的指针
int capacity=2;//数组的容量
int size=0;//数组中记录了多少个int
ptr=新的整数[容量];
int-tmp=0;
int*numaray=新int[容量];
对于(int i=0;i++){
while(true){
cout>num;
如果(num==-1)中断;
如果(大小=容量){
int*temp=新int[容量+2];
容量+=2;
删除[]ptr;
*ptr=tmp;
}
ptr[size==容量]=num;
}
}
}

首先,我建议您使用字符数组。您可以使用memcpy来实现这一点。下面的代码假设您一次读取一个int

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

你很接近。但有几个问题

  • 为循环放弃
    。否则,当您从
    while
    循环中中断
    时,它将永远再次进入

  • 您需要增加
    size
    ,否则
    size==capacity
    将永远不会为真

  • 调整数组大小时,您忘记实际复制中的值

  • 不正确的赋值
    *ptr=temp
    应该是
    ptr=temp

  • 使用布尔索引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;
    }
    
    while(true)
    {
    cout>num;
    如果(num==-1)中断;
    如果(大小=容量){
    int*temp=新int[容量+2];
    对于(inti=0;i
    您永远不会增加
    大小
    。让一个无限for循环包含一个无限while循环,然后从该内部循环调用
    break
    ,只是为了再次循环,这是没有意义的
    ptr[size==capacity]
    只会写入
    ptr[0]
    ptr[1]
    <代码>*ptr=tmp
    如果没有错误,至少应生成编译器警告。如果你使用
    vector
    @paddy,这个程序大约有2行长,而且实际上可以工作,就像我喜欢使用vectors一样,这个程序的规范并没有给我这样的空闲时间。虽然我想我现在可以用向量来写,如果需要的话可以修改。我这样做的目的是帮助我发展新的和删除的技能。你使用
    break
    只是打破while(真正的)循环。for循环也永远不会结束。在外循环中真的没有意义。我之所以将它作为*ptr,是因为否则我会得到这个错误:错误C2440:“=”:无法从“int”转换为“int*”@MehMoose通过在某个地方放置星号直到错误消失来“修复”编译器错误,这不是一个好主意。您很可能只是将错误转换为在运行时发生的不同类型的错误。在这种情况下,修复方法是在
    m
    p
    之间插入一个
    e
    。(考虑使用更有意义的变量名…)而这正是我最初的问题所在(当我输入-1时,它没有停止,当我实现编码时,我必须在数组中找到最低值,它的行为很奇怪,例如,它告诉我最低值是-84215041,当它标识元素时,它给出了相同的值(-84215041)然后我建议你发布一个不同的问题,因为你的问题中根本没有找到最低值的代码。我保证你在循环之前忘记了初始化“最低值”。