Refactoring/ExtractLambda.cpp (41 lines of code) (raw):
#include <iostream>
#include <numeric>
#include <vector>
void print_vec(const std::vector<int> &vec, const std::string &label);
void print_vec(const std::vector<int> &vec, const std::string &label) {
auto str = std::accumulate(vec.cbegin(), vec.cend(), label,
[] (auto accum, auto item) {
return std::move(accum) + " " + std::to_string(item); });
std::cout << str << "\n";
}
void sort_vec_iter(std::vector<int> &myvec) {
for (auto it = myvec.begin(); it < myvec.end(); ++it) {
for (auto jit = it + 1; jit < myvec.end(); ++jit) {
if (*it < *jit) { // Extract Lambda
std::iter_swap(it, jit);
}
}
}
}
void sort_vec_loop(const size_t len, std::vector<int> &myvec) {
for (int i = 0; i < len; ++i) {
for (int j = i + 1; j < len; ++j) {
auto x = myvec[i];
auto y = myvec[j];
if (x < y) { //Extract Lambda
myvec[i] = y;
myvec[j] = x;
}
}
}
}
int extract_demo() {
const size_t len = 5;
std::vector<int> myvec(len);
std::generate(myvec.begin(), myvec.end(), []{ return rand() % 100; });
print_vec(myvec, std::string{"Let's start with: "});
sort_vec_iter(myvec);
print_vec(myvec, std::string{"Let's start with: "});
sort_vec_loop(len, myvec);
print_vec(myvec, std::string{"Let's start with: "});
}