【发布时间】:2021-09-06 21:37:59
【问题描述】:
我正在尝试按升序将元素插入到数组中,为了实现这一点,我制作了以下有效的代码。但我想在这里使用“arrSize”而不是 10 for (int i = 0; i < 10; i++)(下面的代码有效)
int arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int element = 7;
int arrSize = sizeof(arr)/sizeof(arr[0]);
int p = arrSize;
for (; p && element < arr[p - 1]; --p)
arr[p] = arr[p - 1];
arr[p] = element;
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
为此,我需要增加“arrSize”,但是当我这样做时,我的输出是1 2 3 4 5 6 7 7 8 10(不应该有 10,应该有 9)。
即使我不使用“arrSize”而不是 10(见下文),请不要发生这种情况。
int arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int element = 7;
int arrSize = sizeof(arr)/sizeof(arr[0]);
int p = arrSize;
for (; p && element < arr[p - 1]; --p)
arr[p] = arr[p - 1];
arr[p] = element;
arrSize++;
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
如您所见,我在递增后不使用“sizeArr”,但我的程序给了我错误的输出,这就是我将其称为错误的原因。
发生这种情况的任何原因?
谢谢。
【问题讨论】:
-
arr[p] = arr[p - 1];在第一次循环迭代中是 UB。您正在访问数组末尾之后的元素。 -
数组有固定大小。对于插入,您可以使用可调整大小的容器,例如
std::vector。 -
你不能“插入”到一个固定大小的数组中……
-
那么插入时应该只丢弃最大的吗?如果你只有 9 个元素,为什么要打印 10 个?我认为您需要修复
p的初始值的逐一错误
标签: c++ arrays algorithm loops