I've looked over the net for a function to break a vector into three parts with equal sum and I found the following. However, I can't combine in my mind the type of the function (bool) and the value it returns. I mean, given it is a bool function it suppose to return a true or false, so I'd expect to see "return true" or "return false". Instead it returns the counter and yet during runtime it indeed returns a 0 or 1. So my question is, how is possible to write "return variable" and not true/false, and the function to return a true or false? What do I miss here?
Thank you!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
bool part3(vector <int>& arr)
{
int summ = accumulate(arr.begin(), arr.end(), 0);
int part = 0;
int count = 0;
if (summ % 3 == 0) {
for (int x : arr) {
part += x;
if (part == (summ / 3)) {
count++;
part = 0;
}
}
}
return count >= 3; // <-------------- this
The expression "count >= 3" evaluates to a boolean. If count == 0, the expression is false. If count == 5, the expression is true. The evaluated expression is returned. The function is not returning the counter.
Boolean values can be seen as integers with values of 0 (false) and non-0 (true). An actual bool true is '1'. Since your function returns a bool, the returned value will either be 0 or 1.
All integers can be implicitly converted to a bool. If the int value is == 0, the bool is false. Otherwise the bool is true. This works for floats, doubles and pointers, too.