指针问题 - 查找奇数并将它们存储在数组中

0 c++ arrays sorting pointers

我得到了这个函数,我添加了这段代码来遍历数组中的数字,然后我有另一个变量来计算奇数的数量,放入第二个数组

int CopySelected(const int array[], int size, int odd_numbers[])
{
    int oddCounter = 0;
    int i;
    for (i = 0; i < size; ++i)
     {
         if (array[i]%2 != 0)
         odd_numbers[++oddCounter] = array[i];
     }
    return oddCounter;
    
}

Run Code Online (Sandbox Code Playgroud)

该代码因错误而通过,但失败了。有什么建议么?

Ted*_*gmo 5

在分配元素oddCounter 之前这会增加:

odd_numbers[++oddCounter] = array[i];
Run Code Online (Sandbox Code Playgroud)

它应该是:

odd_numbers[oddCounter++] = array[i];
Run Code Online (Sandbox Code Playgroud)

或者

odd_numbers[oddCounter] = array[i];
++oddCounter;
Run Code Online (Sandbox Code Playgroud)

您的函数也可以通过使用标准算法来简化std::copy_if

#include <algorithm>

std::size_t CopySelected(const int array[], std::size_t size, int odd_numbers[]) {
    return std::copy_if(array, array + size, odd_numbers,
                        [&](int value) -> bool { return value % 2; }) -
           odd_numbers;
}
Run Code Online (Sandbox Code Playgroud)

std::vector<int>但是,您可以通过使用s 而不是数组来进一步简化它:

#include <algorithm>
#include <iostream>
#include <vector>

std::vector<int> CopySelected(const std::vector<int>& array) {
    std::vector<int> odd_numbers;
    std::copy_if(array.begin(), array.end(), std::back_inserter(odd_numbers),
                 [&](int value) -> bool { return value % 2; });
    return odd_numbers;
}

int main() {
    std::vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::vector<int> odd = CopySelected(arr);
    for (int value : odd) {
        std::cout << value << '\n';
    }
}
Run Code Online (Sandbox Code Playgroud)