我得到了这个函数,我添加了这段代码来遍历数组中的数字,然后我有另一个变量来计算奇数的数量,放入第二个数组
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)
该代码因错误而通过,但失败了。有什么建议么?
在分配元素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)