如何用{fmt}库实现每n个元素换行格式化数组?
使用{fmt}库实现长数组按指定元素数换行格式化
完全可以实现。下面提供两种简洁的实现方式,都能满足你每5个元素后插入换行的需求:
方法一:按组批量格式化
直接将数组按每5个元素为一组拆分,每组用fmt::join格式化后拼接换行(最后一组末尾不添加换行):
#include <fmt/core.h> #include <vector> #include <algorithm> int main() { std::vector<double> xs { 5.426221e-01, 1.129279e-01, 1.122641e-03, 9.013848e-01, 2.290470e-01, 7.200987e-01, 9.283220e-01, 5.108471e-01, 9.294625e-01, 8.451856e-01, 9.558900e-01, 4.757722e-01, 4.878883e-01, 8.988282e-01, 4.536756e-01, 3.459857e-01, 1.216555e-01, 3.884544e-01, 3.217016e-01, 4.758714e-01, 2.230451e-01, 7.985618e-01 }; std::string output; const int elements_per_line = 5; for (size_t i = 0; i < xs.size(); i += elements_per_line) { auto end_idx = std::min(i + elements_per_line, xs.size()); output += fmt::format("{:16.8e}", fmt::join(xs.begin() + i, xs.begin() + end_idx, "")); if (end_idx != xs.size()) { output += '\n'; } } fmt::print("{}", output); return 0; }
方法二:逐个元素格式化并判断换行
遍历每个元素,格式化后根据索引判断是否需要插入换行:
#include <fmt/core.h> #include <vector> #include <string> int main() { std::vector<double> xs { 5.426221e-01, 1.129279e-01, 1.122641e-03, 9.013848e-01, 2.290470e-01, 7.200987e-01, 9.283220e-01, 5.108471e-01, 9.294625e-01, 8.451856e-01, 9.558900e-01, 4.757722e-01, 4.878883e-01, 8.988282e-01, 4.536756e-01, 3.459857e-01, 1.216555e-01, 3.884544e-01, 3.217016e-01, 4.758714e-01, 2.230451e-01, 7.985618e-01 }; std::string output; const int elements_per_line = 5; for (size_t i = 0; i < xs.size(); ++i) { fmt::format_to(std::back_inserter(output), "{:16.8e}", xs[i]); if ((i + 1) % elements_per_line == 0 && i != xs.size() - 1) { output += '\n'; } } fmt::print("{}", output); return 0; }
两种方式都能生成你需要的格式化输出,可根据自己的习惯选择。
内容的提问来源于stack exchange,提问作者SU3
相关产品推荐
相关产品推荐

