-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathAccumulate.cpp
More file actions
84 lines (69 loc) · 2.58 KB
/
Accumulate.cpp
File metadata and controls
84 lines (69 loc) · 2.58 KB
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
// =====================================================================================
// Accumulate.cpp // std::accumulate
// =====================================================================================
module modern_cpp:accumulate;
namespace AlgorithmAccumulate {
static std::string toString(std::vector<std::string> const& vec) {
std::string s{
std::accumulate(
vec.begin(),
vec.end(),
std::string{}, // first element
[counter = 0](const std::string& first, const auto& next) mutable {
counter++;
std::ostringstream ss;
ss << std::setfill('0') << std::setw(2) << counter
<< ": " << std::setfill(' ') << std::setw(10)
<< std::right << next << std::endl;
return first + ss.str();
}
)
};
return s;
}
template <typename T>
static std::string toString(std::vector<T> const& vec) {
std::string s{
std::accumulate(
vec.begin(),
vec.end(),
std::string{}, // first element
[counter = 0](const std::string& first, const T& next) mutable {
counter++;
std::ostringstream ss;
ss << std::setfill('0') << std::setw(2) << counter
<< ": " << std::setfill(' ') << std::setw(10)
<< std::right << next << std::endl;
return first + ss.str();
}
)
};
return s;
}
static void test_01() {
std::vector<std::string> names {"Hans", "Sepp", "Georg"};
const std::string& s{ toString(names) };
std::cout << s << std::endl;
}
static void test_02() {
std::vector<float> digits { 10.5f, 11.5f, 12.5f, 13.5f, 14.5f, 15.5f };
const std::string& s{ toString(digits) };
std::cout << s << std::endl;
}
static void test_03() {
// using template version of toString
std::vector<std::string> names { "Hans", "Sepp", "Georg" };
const std::string& s{ toString<std::string>(names) };
std::cout << s << std::endl;
}
}
void main_accumulate()
{
using namespace AlgorithmAccumulate;
test_01();
test_02();
test_03();
}
// =====================================================================================
// End-of-File
// =====================================================================================