Во-первых, вы пытаетесь изменить vector
, пока просматриваете его. Вам не нужно этого делать, и инструкции не требуют этого.
Во-вторых, инструкции просят вас вернуть логическое значение, а не строку.
В-третьих, ваша функция не проходит через весь вектор. std::vector
имеет член size()
для получения фактического количества элементов и operator[]
для доступа к элементам. Но даже с этим значением размера ваш l oop равен return
на 1-й итерации, поэтому вы сравниваете только 1-й элемент и игнорируете другие элементы. В инструкциях четко указано, что нужно возвращать true
, если все элементы соответствуют условию.
Попробуйте вместо этого:
//Name
//This program will determine if a vector has multiples of fives
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
bool findMultipleOfFives(const vector<int> &all_values);
int main()
{
cout << "This program will determine whether a vector is full of multiples of five." << endl;
vector<int> all_values{ 10, 20, 30, 40, 50 };
cout << boolalpha << findMultipleOfFives(all_values);
}
bool findMultipleOfFives(const vector<int>& all_values)
{
if (all_values.empty())
return false;
for (size_t count = 0; count < all_values.size(); count++)
{
if ((all_values[count] % 5) != 0)
return false;
}
return true;
}
В качестве альтернативы, std::vector
имеет iterator
s, которые вы можете использовать вместо этого, например:
bool findMultipleOfFives(const vector<int>& all_values)
{
if (all_values.empty())
return false;
for (vector<int>::const_iterator iter = all_values.begin(); iter != all_values.end(); ++iter)
{
if ((*iter % 5) != 0)
return false;
}
return true;
}
Или, используя for
l oop на основе диапазона в C ++ 11 и более поздних версиях (который использует iterator
s внутри) :
bool findMultipleOfFives(const vector<int>& all_values)
{
if (all_values.empty())
return false;
for (int num : all_values)
{
if ((num % 5) != 0)
return false;
}
return true;
}