我可以从vector中获取几个int,并使用迭代器将它们放到标准输出中:
std::vector<int> v{0,1,2,3,4,5};
std::copy_n(v.begin(),
3,
std::ostream_iterator<int>(std::cout, ":"));我可以使用新的C++20范围从vector中获取几个int,并在for循环中使用|运算符将它们放到标准输出中,使用<<一次一个值。
for(int n : std::views::all(v)
| std::views::take(3))
{
std::cout << n << '/';
}如何才能将std::views::all(v) | std::views::take(3)的结果放到标准输出中,而不显式地通过值循环?
类似于:
std::views::all(v)
| std::views::take(4)
| std::ostream_iterator<int>(std::cout, " ");或
std::cout << (std::views::all(v)
| std::views::take(4));发布于 2021-01-12 08:28:29
您正在寻找的具体内容是使用新的ranges算法:
std::ranges::copy(v | std::views::take(4),
std::ostream_iterator<int>(std::cout, " "));您不需要直接使用views::all,上面的内容就足够了。
您也可以直接使用fmtlib:
// with <fmt/ranges.h>
// this prints {0, 1, 2, 3}
fmt::print("{}\n", v | std::views::take(4));或者使用fmt::join获得更多控制(这允许您在指定分隔符的同时对每个元素应用格式字符串):
// this prints [00:01:02:03]
fmt::print("[{:02x}]\n", fmt::join(v | std::views::take(4), ":"));https://stackoverflow.com/questions/65676338
复制相似问题