因為手邊沒有 VC14 所以就用 gcc 7.5 搭配選項 -std=c++14 來
代替.
最無腦就是直接用 range-v3 裡的 views::cartesian_product()
來實現 (或者用 views::cycle 兜出想要的組合):
const std::array numbers{1, 2, 3};
const std::array fruits{"banana"s, "pineapple"s, "grape"s};
const std::array colors{"yellow"s, "orange"s, "purple"s};
const auto parameters = ranges::views::cartesian_product(
numbers, fruits, colors);
for (auto&& parameter : parameters) {
std::cout << std::get<0>(parameter) << ", "
<< std::get<1>(parameter) << ", "
<< std::get<2>(parameter) << std::endl;
}
range-v3 (GitHub): https://github.com/ericniebler/range-v3
Compiler Explorer: https://godbolt.org/z/kVhwt3
順帶一提像 boost / range-v3 / mpl11 / {fmt} 等函式庫基本上
都可以視為標準庫, 所以建議花時間研究有哪些現成的東西可以用
避免自己寫. 對語言還不熟悉的話開發上很容易遇到考慮不周全的
地方, 甚至是養成撰碼的壞習慣 (如上一篇回文).