1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| #include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
class c_test {
public:
c_test(int input_first) { reset(input_first); }
public:
void reset(int input_first) { first=input_first; count=1; }
bool operator() (int one_value) {
// std::cout << "debug - c_test::operator() : multiple " << static_cast<int>(count * first) << " and " << one_value << " (first: " << first << ") - " << count << std::endl;
++count;
return (one_value != static_cast<int>(count * first));
}
private:
int first;
size_t count;
};
void display_result(const std::vector<int>& tab, const std::vector<int>::iterator& result_it, const std::string& begin) {
if (tab.size() > 1) {
std::vector<int>::const_iterator it = tab.begin();
std::cout << begin << " [" << (*it);
for(++it; (it != tab.end()); ++it) {
std::cout << ' ' << (*it);
}
std::cout << "] is_mult " << ((result_it == tab.end())? "true": "false") << std::endl;
} else {
std::cout << begin << " size < 2" << std::endl;
}
}
int main (int argc, char** argv)
{
std::vector<int> tab;
tab.reserve(8);
tab.push_back( 3);
tab.push_back( 6);
tab.push_back( 9);
tab.push_back(12);
tab.push_back(15);
tab.push_back(18);
tab.push_back(21);
// Test 1 - 7 elements, all multiples
c_test one_test( tab[0] );
std::vector<int>::iterator result_it = std::find_if((tab.begin() + 1), tab.end(), one_test);
display_result(tab, result_it, "main - tab");
// Test 2 - 8 elements, all multiples
one_test.reset( tab[0] );
tab.push_back(24);
result_it = std::find_if((tab.begin() + 1), tab.end(), one_test);
display_result(tab, result_it, "main - tab");
// Test 3 - 8 elements, one error
tab[4] = 17;
one_test.reset( tab[0] );
result_it = std::find_if((tab.begin() + 1), tab.end(), one_test);
display_result(tab, result_it, "main - tab");
return EXIT_SUCCESS;
} |
Partager