首先,您不会在现有代码中通过引用传递任何内容。如果你想通过引用传递向量,你需要像这样声明你的函数:
int OddCount(const std::vector<int>& v)
// ................................^ That denotes a reference
{
return std::count_if(v.begin(), v.end(), [](int i)
{
return i % 2;
});
}
int EvenCount(const std::vector<int>& v)
{
return std::count_if(v.begin(), v.end(), [](int i)
{
return !(i % 2);
});
}
注意:您确定奇数/偶数的逻辑在上述两个函数中都是固定的。您的方法不正确(除非您认为 2 是唯一的偶数)。
其次,您从未声明过一个even
向量(也没有必要,也没有必要声明一个odd
向量)。所以你应该修改你的输出语句:
cout << "Odd Numbers: " << OddCount(values) << std::endl;
cout << "Even Numbers: " << EvenCount(values) << std::endl;
如果您希望从单个函数调用中返回两个值,有几种方法可以做到这一点。“最简单”的方法是返回 a std::pair<int, int>
:
std::pair<int, int> CountOddsAndEvens(const std::vector<int>& v)
{
int evens = std::count_if(v.begin(), v.end(), [](int i)
{
return !(i % 2);
});
int odds = v.size() - evens;
return std::make_pair(evens, odds);
}
或者,您可以将它们作为输出参数传递:
void CountOddsAndEvens(const std::vector<int>& v, int& evens, int& odds)
{
evens = std::count_if(v.begin(), v.end(), [](int i)
{
return !(i % 2);
});
odds = v.size() - evens;
}
这两者都需要您更改当前的输出调用:
std::pair<int, int> results = CountOddsAndEvens(values);
std::cout << "Odds = " << results.second << ", Evens = " << results.first << std::endl;
或者
int evens, odds;
CountOddsAndEvens(values, evens, odds);
std::cout << "Odds = " << odds << ", Evens = " << evens << std::endl;