#include <iostream>
#include <string>
#include <vector>
using namespace std;
template <typename T, size_t array_size>
inline void copy_array_to_vector(vector<T> &vec, T (&arr)[array_size]) {
vec.insert(vec.end(), &(arr[0]), &(arr[array_size]));
}
template <typename T>
inline void DFS_cascade_string(vector<string> &vec_str, vector<string> &DFS_vec_str, const vector<T>& vec) {
string str_tmp;
for (int i = 0; i < DFS_vec_str.size(); i++)
str_tmp += DFS_vec_str[i] + " ";
for (int i = 0; i < vec.size(); i++)
vec_str.push_back(str_tmp + to_string(vec[i]));
}
template <typename T, typename ... ARGS>
inline void DFS_cascade_string(vector<string> &vec_str, vector<string> &DFS_vec_str, const vector<T>& vec, const ARGS&... args) {
for (int i = 0; i < vec.size(); i++) {
DFS_vec_str.push_back(to_string(vec[i]));
DFS_cascade_string(vec_str, DFS_vec_str, args...);
DFS_vec_str.pop_back();
}
}
template <typename ... ARGS>
inline void DFS_cascade_string(vector<string> &vec_str, const ARGS&... args) {
vector<string> DFS_vec_str;
DFS_cascade_string(vec_str, DFS_vec_str, args...);
}
int main() {
// var1
vector<int> vec_var1;
int local_var1[] = { 10, 20, 30, 40};
copy_array_to_vector(vec_var1, local_var1);
// var2
vector<double> vec_var2;
double local_var2[] = { 44.0, 88.0 };
copy_array_to_vector(vec_var2, local_var2);
// var3
vector<double> vec_var3;
double local_var3[] = { 0.0 };
copy_array_to_vector(vec_var3, local_var3);
// var4
vector<double> vec_var4;
double local_var4[] = { 123.0, 150.0 };
copy_array_to_vector(vec_var4, local_var4);
// ===============================================
// test 1
vector<string> vec_str;
DFS_cascade_string(vec_str, vec_var1, vec_var2, vec_var3);
for (int i = 0; i < vec_str.size(); i++)
printf("[%d], %s\n", i, vec_str[i].c_str());
printf("\n======================\n\n");
// test 2
vec_str.clear();
DFS_cascade_string(vec_str, vec_var1, vec_var2, vec_var3, vec_var4);
for (int i = 0; i < vec_str.size(); i++)
printf("[%d], %s\n", i, vec_str[i].c_str());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBhcnJheV9zaXplPgppbmxpbmUgdm9pZCBjb3B5X2FycmF5X3RvX3ZlY3Rvcih2ZWN0b3I8VD4gJnZlYywgVCAoJmFycilbYXJyYXlfc2l6ZV0pIHsKICAgIHZlYy5pbnNlcnQodmVjLmVuZCgpLCAmKGFyclswXSksICYoYXJyW2FycmF5X3NpemVdKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUgdm9pZCBERlNfY2FzY2FkZV9zdHJpbmcodmVjdG9yPHN0cmluZz4gJnZlY19zdHIsIHZlY3RvcjxzdHJpbmc+ICZERlNfdmVjX3N0ciwgY29uc3QgdmVjdG9yPFQ+JiB2ZWMpIHsKICAgIHN0cmluZyBzdHJfdG1wOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBERlNfdmVjX3N0ci5zaXplKCk7IGkrKykKICAgICAgICBzdHJfdG1wICs9IERGU192ZWNfc3RyW2ldICsgIiAiOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVjLnNpemUoKTsgaSsrKQogICAgICAgIHZlY19zdHIucHVzaF9iYWNrKHN0cl90bXAgKyB0b19zdHJpbmcodmVjW2ldKSk7Cn0KdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIC4uLiBBUkdTPgppbmxpbmUgdm9pZCBERlNfY2FzY2FkZV9zdHJpbmcodmVjdG9yPHN0cmluZz4gJnZlY19zdHIsIHZlY3RvcjxzdHJpbmc+ICZERlNfdmVjX3N0ciwgY29uc3QgdmVjdG9yPFQ+JiB2ZWMsIGNvbnN0IEFSR1MmLi4uIGFyZ3MpIHsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7IGkrKykgewogICAgICAgIERGU192ZWNfc3RyLnB1c2hfYmFjayh0b19zdHJpbmcodmVjW2ldKSk7CiAgICAgICAgREZTX2Nhc2NhZGVfc3RyaW5nKHZlY19zdHIsIERGU192ZWNfc3RyLCBhcmdzLi4uKTsKICAgICAgICBERlNfdmVjX3N0ci5wb3BfYmFjaygpOwogICAgfQoKfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uIEFSR1M+CmlubGluZSB2b2lkIERGU19jYXNjYWRlX3N0cmluZyh2ZWN0b3I8c3RyaW5nPiAmdmVjX3N0ciwgY29uc3QgQVJHUyYuLi4gYXJncykgewogICAgdmVjdG9yPHN0cmluZz4gREZTX3ZlY19zdHI7CiAgICBERlNfY2FzY2FkZV9zdHJpbmcodmVjX3N0ciwgREZTX3ZlY19zdHIsIGFyZ3MuLi4pOwp9CgoKaW50IG1haW4oKSB7CgkvLyB2YXIxCiAgICB2ZWN0b3I8aW50PiB2ZWNfdmFyMTsKICAgIGludCAgbG9jYWxfdmFyMVtdID0geyAxMCwgMjAsIDMwLCA0MH07CiAgICBjb3B5X2FycmF5X3RvX3ZlY3Rvcih2ZWNfdmFyMSwgbG9jYWxfdmFyMSk7CgogICAgLy8gdmFyMgogICAgdmVjdG9yPGRvdWJsZT4gdmVjX3ZhcjI7CiAgICBkb3VibGUgbG9jYWxfdmFyMltdID0geyA0NC4wLCA4OC4wIH07CiAgICBjb3B5X2FycmF5X3RvX3ZlY3Rvcih2ZWNfdmFyMiwgbG9jYWxfdmFyMik7CgogICAgLy8gdmFyMwogICAgdmVjdG9yPGRvdWJsZT4gdmVjX3ZhcjM7CiAgICBkb3VibGUgbG9jYWxfdmFyM1tdID0geyAwLjAgfTsKICAgIGNvcHlfYXJyYXlfdG9fdmVjdG9yKHZlY192YXIzLCBsb2NhbF92YXIzKTsKCiAgICAvLyB2YXI0CiAgICB2ZWN0b3I8ZG91YmxlPiB2ZWNfdmFyNDsKICAgIGRvdWJsZSBsb2NhbF92YXI0W10gPSB7IDEyMy4wLCAxNTAuMCB9OwogICAgY29weV9hcnJheV90b192ZWN0b3IodmVjX3ZhcjQsIGxvY2FsX3ZhcjQpOwoKCgkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJLy8gdGVzdCAxCiAgICB2ZWN0b3I8c3RyaW5nPiB2ZWNfc3RyOwogICAgREZTX2Nhc2NhZGVfc3RyaW5nKHZlY19zdHIsIHZlY192YXIxLCB2ZWNfdmFyMiwgdmVjX3ZhcjMpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZWNfc3RyLnNpemUoKTsgaSsrKQogICAgICAgIHByaW50ZigiWyVkXSwgJXNcbiIsIGksIHZlY19zdHJbaV0uY19zdHIoKSk7CiAgICAKICAgIAogICAgcHJpbnRmKCJcbj09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CiAgICAKICAgIC8vIHRlc3QgMgogICAgdmVjX3N0ci5jbGVhcigpOwogICAgREZTX2Nhc2NhZGVfc3RyaW5nKHZlY19zdHIsIHZlY192YXIxLCB2ZWNfdmFyMiwgdmVjX3ZhcjMsIHZlY192YXI0KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVjX3N0ci5zaXplKCk7IGkrKykKICAgICAgICBwcmludGYoIlslZF0sICVzXG4iLCBpLCB2ZWNfc3RyW2ldLmNfc3RyKCkpOwogICAgCiAgICAKCXJldHVybiAwOwp9
[0], 10 44.000000 0.000000
[1], 10 88.000000 0.000000
[2], 20 44.000000 0.000000
[3], 20 88.000000 0.000000
[4], 30 44.000000 0.000000
[5], 30 88.000000 0.000000
[6], 40 44.000000 0.000000
[7], 40 88.000000 0.000000
======================
[0], 10 44.000000 0.000000 123.000000
[1], 10 44.000000 0.000000 150.000000
[2], 10 88.000000 0.000000 123.000000
[3], 10 88.000000 0.000000 150.000000
[4], 20 44.000000 0.000000 123.000000
[5], 20 44.000000 0.000000 150.000000
[6], 20 88.000000 0.000000 123.000000
[7], 20 88.000000 0.000000 150.000000
[8], 30 44.000000 0.000000 123.000000
[9], 30 44.000000 0.000000 150.000000
[10], 30 88.000000 0.000000 123.000000
[11], 30 88.000000 0.000000 150.000000
[12], 40 44.000000 0.000000 123.000000
[13], 40 44.000000 0.000000 150.000000
[14], 40 88.000000 0.000000 123.000000
[15], 40 88.000000 0.000000 150.000000