Re: [问题] tuple如何用for循环取值

楼主: poyenc (发箍)   2020-07-01 02:35:05
因为手边没有 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} 等函式库基本上
都可以视为标准库, 所以建议花时间研究有哪些现成的东西可以用
避免自己写. 对语言还不熟悉的话开发上很容易遇到考虑不周全的
地方, 甚至是养成撰码的坏习惯 (如上一篇回文).
作者: bibo9901 (function(){})()   2020-07-01 03:33:00
原来现在 array 可以不写 template argument 了!?
作者: Dracarys (MayShowGunMore)   2020-07-01 10:50:00
应该是因为C++17的class template argument deduction吧
作者: steve1012 (steve)   2020-07-01 14:24:00
对CTAD. 但只能全写或不写

Links booklink

Contact Us: admin [ a t ] ucptt.com