C++:创建循环条件的 int 数组时出现问题

C++: Issue with creating int array with conditions in loop

本文关键字:数组 问题 int 创建 循环 条件 C++      更新时间:2023-10-16

我有以下代码:

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时的大小。因此,您给值分配一个元素太远了。

有多个问题。

  1. 只需改用std::partionstd::partion_copy即可。然后,您可以使用std::distance来计算"好"元素的数量,方法是使用partition的返回值。无需重新发明轮子。
  2. 只需使用 else 分支而不是 else if ,您将不必要地进行两次检查。
  3. 您既不递增a也不递增b.您应该将a重命名为 count_goodb重命名为 count_bad
  4. 您需要调用 a2[size-count_bad - 1] ,否则通过访问 a2[size] 会出现一个错误。
  5. C++不允许动态数组。由于size在编译中是未知的int a2[size];因此是不格式化的。请改用std::vector