最快速导出CSV的方式是用std::ofstream逐行逐字段流式写入,开启binary模式避免换行符转换,手动处理RFC 4180转义与UTF-8 BOM以兼容Excel。
用 std::ofstream 直接写入 CSV,避免中间字符串拼接
最快速的方式不是先拼成一个大 std::string 再写入,而是逐行、逐字段流式写入。每次调用 operator 本质是缓冲区追加,比反复 += 字符串快得多,尤其对大向量(如百万级元素)更明显。
关键点:
- 用
std::ofstream构造时开启二进制模式(std::ios::binary)可禁用 Windows 下的自动\n→\r\n转换,避免意外多出回车;若需兼容 Excel,再手动写"\r\n" - 字段含逗号、换行或双引号时,必须按 RFC 4180 规则包裹双引号,并对内部双引号转义为
"" - 不要用
—— 它强制刷新缓冲区,改用"\n"字符串提升性能
处理 std::vector> 时如何统一导出
常见场景是二维数据(如表格),外层 vector 是行,内层是列。直接嵌套循环即可,但要注意类型泛化和字段分隔控制:
- 对每个
T类型,需提供可输出到std::ostream&的重载(如operator),或用std::to_string()(仅限数值) - 每行末尾不加逗号,每列之间用
,分隔,最后一列后直接换行 - 若某行为空(
inner_vec.empty()),仍应写一行空行(即只输出"\n"),保持行列对齐
示例片段(导出 vector>):
立即学习“C++免费学习笔记(深入)”;