14.36
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class ScanfString {
public:
ScanfString(istream& in = cin) :is(in) {}
string operator() () {
getline(is, s);
return s;
}
explicit operator istream& () const {
return is;
}
private:
istream& is;
string s;
};
int main()
{
ScanfString ss;
vector<string> vec;
do {
vec.push_back(ss());
} while ((istream&)ss);
for (auto s : vec)
cout << s << endl;
return 0;
}
14.37
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
template <typename T>
struct Equal {
bool operator()(T t1, T t2) const { return t1 == t2; }
};
int main()
{
vector<int> vec = { 2,3,4,34,4,6,5,6,4,7 };
Equal<int> eq;
int num = 4;
for_each(vec.begin(), vec.end(),
[&](int& n) mutable {
if (eq(n, num)) n = 0;
}
);
for (auto i : vec)
cout << i << " ";
return 0;
}
14.42
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
using namespace std::placeholders;
int main()
{
vector<int> ivec = { 2048, 100, 100, 2048, 2048 };
cout << count_if(ivec.cbegin(), ivec.cend(), bind(greater<int>(), _1, 1024)) << endl;
vector<string> svec = { "apple", "peach", "pooch", "orange", "watermelon", };
cout << *find_if(svec.cbegin(), svec.cend(), bind(not_equal_to<string>(), _1, "pooch")) << endl;
transform(ivec.begin(), ivec.end(), ivec.begin(), bind(multiplies<int>(), _1, 2));
for (auto i : ivec)
cout << i << " ";
return 0;
}
14.43
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
using namespace std::placeholders;
int main()
{
int n = 256;
vector<int> vec = { 2, 4, 8, 32 };
modulus<int> mod;
bool flag = all_of(vec.begin(), vec.end(),
[&mod, n](int i)->bool { return (mod(n, i) == 0); }
);
cout << (flag ? "Yes" : "No") << endl;
return 0;
}
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <functional>
using namespace std;
int add(int i, int j) { return i + j; }
auto mod(int i, int j) { return i % j; }
struct divide
{
int operator()(int denominator, int divisor) { return denominator / divisor; }
};
int main()
{
map < string, function<int(int, int)>> binops = {
{"+",add},
{"-", minus<int>()},
{"/", divide()},
{"*", [](int i ,int j) { return i * j; } },
{"%", mod},
};
cout << binops["+"](2, 3) << endl;
cout << binops["-"](10, 6) << endl;
cout << binops["/"](56, 4) << endl;
cout << binops["*"](6, 6) << endl;
cout << binops["%"](10, 7) << endl;
return 0;
}