C++:创建循环条件的 int 数组时出现问题
C++: Issue with creating int array with conditions in loop
我有以下代码:
size_t function(T* arr, size_t size, FUN f){
size_t a = 0;
size_t b = 0;
int a2[size];
for (int y = 0; y<size; y++){
if (f(arr[y])){
a2[0+a] = arr[y];
++count_good;
} else if (f(arr[y]) == false){
a2[size-b] = arr[y];
++count_bad;
}
}
copy(a2, a2 + sizeof(a2) / sizeof(a2[0]), arr);
return a;
}
哪个应该根据条件排列 a2:如果为 true,则将值放在数组的前面;如果函数的结果为 false,则将它们放在后面。
但是,如果我设置
int arr[6]={10,3,9,6,3,2}
;
我的函数的结果是
int arr[6]={10,6,2,0,3,9}
;
如您所见,其中一个值已更改为 0。
任何想法从何而来?
谢谢
如果你的size
表示数组中的元素数,则行
a2[size-b] = arr[y];
超过b = 0
时的大小。因此,您给值分配一个元素太远了。
有多个问题。
- 只需改用
std::partion
或std::partion_copy
即可。然后,您可以使用std::distance
来计算"好"元素的数量,方法是使用partition
的返回值。无需重新发明轮子。 - 只需使用
else
分支而不是else if
,您将不必要地进行两次检查。 - 您既不递增
a
也不递增b
.您应该将a
重命名为count_good
,b
重命名为count_bad
。 - 您需要调用
a2[size-count_bad - 1]
,否则通过访问a2[size]
会出现一个错误。 - C++不允许动态数组。由于
size
在编译中是未知的int a2[size];
因此是不格式化的。请改用std::vector
。
相关文章:
- 数组C++问题中最大和第二大的数字
- 二维数组问题
- 数组问题:变量周围的堆栈'arr'已损坏
- 无符号字符数组问题
- 数组问题(if (zeds[i].x == zeds[i].x))
- 字符数组问题
- C++中的turbo数组问题
- 输入和输出的2D字符数组问题
- 多维数组问题
- 指针和数组指向数组问题
- 如何随机排列数组问题
- C++ 多维数组问题 - 多次打印条目
- C++ 2D 读入数组问题
- C++读入 2D 数组问题
- 指针和多维数组问题
- C++多项式类,指针数组问题
- 在数组问题(C++)中查找偶数
- 二维std::数组问题
- 向量/数组问题,不能给变量赋索引/不能使用变量作为数组大小(索引)c++
- 指针数组问题