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