我遇到的问题是将我的引用的返回值传递给main函数。代码应该返回用户输入的偶数和奇数的数量。我认为我在传递中的语法是错误的。
using namespace std;
int numOfOddEven(vector<int>);
int main ()
{
int numValues, odd;
vector<int> values;
cout << "Enter number of values: ";
cin >> numValues;
for(int count = 0; count < numValues; count++)
{
int tempValue;
cout << "Enter value: ";
cin >> tempValue;
values.push_back(tempValue);
}
cout <<"Odd numbers: " << numOfOddEven(odd);
}cout <<"Even numbers: " << numOfOddEven(even);
int numOfOddEven(vector<int> vect)
{
int odd = 0;
int even = 0;
for (int i = 0; i < vect.size(); i++)
if (i/2 == 1 )
++even;
else
++odd;
return odd;
return even;
}
答案 0 :(得分:4)
我在这段代码中看到的一些错误
numofOddEven
的内容不是该功能所期望的(int
与vector
)了解函数如何工作,参考传递实际意味着什么,return
做什么,以及在c ++中取数字模数的含义。然后再尝试接近这个。
答案 1 :(得分:1)
您使用错误的参数调用并使用错误的逻辑
odd =numOfOddEven(values); //Use values
cout <<"Odd numbers: " << odd;
cout <<"Even numbers: " << values.size()- odd; //Get even count using this
在numOfOddEven
中,只需返回odd
点数
修复逻辑: -
int numOfOddEven(vector<int> vect)
{
int odd = 0;
//int even = 0;
for (int i = 0; i < vect.size(); i++)
if (vect[i]%2 != 0 )
++odd;
return odd;
//return even;
}
另一种方法是使用std::count_if
int numodd = std::count_if(values.begin(), values.end(),
[](int i) {return i % 2 != 0;});
int numeven = values.size() - numodd ;
答案 2 :(得分:1)
int numOfOddEven(vector<int> & vect)
{
int odd = 0;
int even = 0;
for (int i = 0; i < vect.size(); i++)
if (vect[i]%2 == 1 )
++even;
else
++odd;
return odd;
}
int main ()
{
int numValues, odd;
vector<int> values;
cout << "Enter number of values: ";
cin >> numValues;
for(int count = 0; count < numValues; count++)
{
int tempValue;
cout << "Enter value: ";
cin >> tempValue;
values.push_back(tempValue);
}
cout <<"Odd numbers: " << numOfOddEven(values);
cout <<"Even numbers: " << numValues - numOfOddEven(values);
cin.get();
cin.get();
return 0;
}
答案 3 :(得分:0)
引用在函数声明/签名中定义。例如:
void fct( int &ref1, int &ref2)
{
ref1 = 1;
ref2 = 2;
}
int ref1, ref2;
fct(ref1, ref2);
无需任何退货。编译器在看到&amp;时,会将其视为指针,但在代码中,您将其视为变量。
答案 4 :(得分:0)
解决主题中的问题:
int numOfOddEven(vector<int> vect) { }
添加&amp;在vect之前:
int numOfOddEven(vector<int> & vect) { }
然后vect将通过引用传递而不是复制。关于返回值,也将它们作为引用传入,然后声明类型为void的函数
void numOfOddEven(vector<int> & vect, int & countodd, int & counteven) { }
然后只修改函数中的那些变量,不要返回任何内容。
答案 5 :(得分:0)
首先,您没有在现有代码中通过引用传递任何内容。如果你想通过引用传递向量,你需要声明你的函数:
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;
如果您希望从单个函数调用返回两个值,则有几种方法可以执行此操作。 “最简单”的方法是返回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;
答案 6 :(得分:0)
首先要看的是宣言:
int numOfOddEven(vector<int>);
这会返回一个int
,而不是两个。如果要返回两条(独立的)信息,则必须更改某些内容。如果要返回两个整数,可以编写一个具有此类型的函数:
pair<int,int> numOfOddEven(vector<int>);
然后,在函数结束时,您可以使用return make_pair(num_odds, num_evens)
返回。然后,您还需要执行类似的操作以实际接受返回的值:
tie(odd, even) = numOfOddEven(values);
但是,这对于初学者来说可能太复杂了。你想找到另一种环形交叉路,从一个函数调用中“返回”两个数字。
void numOfOddEven(vector<int>, int&, int&);
请注意,返回类型不是void
。这个函数实际上并不是return
。但是,您可以通过引用传递两个变量odd
和even
。当你说“通过参考传递”时,这可能是你的意思。
...需要更多代码... [community-wiki :-)]
但是,再次!很明显,每个数字都是奇数或偶数。因此,只返回一个数字odd
即可。然后你可以计算(在main
内)偶数的数量就是向量的总大小减去奇数的数量。