调整动态数组大小时保留用户输入的值的问题
Issue with retaining user inputted values when resizing a dynamic array
这是我尝试创建一个动态数组,该数组在用户为数组预分配数据后调整大小。我使用第二个索引/计数器来获取原始计数器的值。
最具体地说,如何将计算机中的随机值替换为用户输入的值?
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
int size;
cout <`enter code here`< "Enter the size of the array: ";
cin >> size;
if (size <= 0) {
cout << "Array size must be > 0" << endl;
exit(0);
}
int *arr;
arr = new int[size];
int num = 0;
int idx = 0, idx2 = 0;
while (num != -1)
{
cout << "Enter a value to place into an array or -1 to exit: ";
cin >> num;
if (num == -1)
{
break;
}
else if (idx < size)
{
arr[idx++] = num;
}
else
{
idx2 = idx * 2;
int *newArr = new int[size];
memcpy(newArr, arr, size * sizeof(int));
delete [] arr;
newArr[idx++] = num;
arr = newArr;
/*
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
*/
}
}
for(int x = 0; x < idx; x++)
{
cout <<arr[x] << endl;
}
cout << endl << "Reshaped Array of Size: "<< idx << endl;
return 0;
}
具体来说,我输出的大小为 2 的数组错误地显示我输入的值 (2, 3, 4, 5, 6, 66, 55(:
3
4
268848517
6
1397644077
55
Reshaped Array of Size: 6
Program ended with exit code: 0
从你的代码中,
else
{
idx2 = idx * 2;
int *newArr = new int[size]; <<<<<<<<<<<< bug
memcpy(newArr, arr, size * sizeof(int)); <<<<<<<<<<<<
delete [] arr;
newArr[idx++] = num;
arr = newArr;
有一个错误。您正在创建具有相同"大小"的 int[]。它应该是"idx2"。
+ memcpy(( 的复制大小应该相应地改变(例如 idx(
请替换此行
idx2 = idx * 2;
由
size = size * 2;
不再需要使用 idx2。然后它会起作用。
虽然你最大的问题是idx2 = idx * 2
乘而不是size
乘以二,但你可能想重新排序你的条件测试以消除三部分测试。您需要做的就是检查是否num == -1
,如果是,则break
,否则只需文本(如果idx == size
(,如果是,则重新分配,例如
while (num != -1)
{
cout << "Enter a value to place into an array or -1 to exit: ";
cin >> num;
if (num == -1)
break;
else if (idx == size) {
int *newArr = new int[2 * size];
memcpy(newArr, arr, size * sizeof(int));
delete [] arr;
arr = newArr;
size *= 2;
}
arr[idx++] = num;
}
(除非break;
循环,否则将始终分配arr[idx++] = num;
(
释放您分配的内存,例如
delete [] arr;
return 0;
}
请注意,您应该始终验证您的输入,例如
if (!(cin >> num)) {
cerr << "error: invalid integer value.n";
break;
}
相关文章:
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 编写时C++中的输入重定向问题
- 输入std::数组时出现问题
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- 用户输入字符串的文件附加问题..C++
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 每当调试C (Xcode 10.1)时,输入问题
- iostream输入问题
- 井字输入问题
- 多个玩家的键盘输入问题
- 字符输入问题
- 使用 getline() 的字符串输入问题
- 如何在我的C++测验中输入问题
- GLFW操纵杆输入问题
- 在Bison中为$$输入问题
- c++内存/输入问题
- C++ 拆分输入问题
- c++文件输入问题
- 基本c++输入问题