问题将值从一个数组转移到一个新数组
Issue transferring values from one array to a new one
我正在尝试创建一个程序,该程序将填充一个以 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;
}
}
}
首先,建议您使用字符数组。您可以为此使用 memcpy。下面的代码假设您一次读取一个 int。
int *temp = new int[capacity + 2];
memcpy ( tmp, ptr, capacity );
temp[capacity + 1] = num;
capacity += 2;
你很接近。但是有几个问题。
放弃 for
循环。否则,当您从 while
循环中 break
时,它只会永远再次进入。
你需要增加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;
}
我正在尝试创建一个程序,该程序将填充一个以 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;
}
}
}
首先,建议您使用字符数组。您可以为此使用 memcpy。下面的代码假设您一次读取一个 int。
int *temp = new int[capacity + 2];
memcpy ( tmp, ptr, capacity );
temp[capacity + 1] = num;
capacity += 2;
你很接近。但是有几个问题。
放弃
for
循环。否则,当您从while
循环中break
时,它只会永远再次进入。你需要增加
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;
}