如何将二维vector成员写入文件?编译报错:无匹配<<运算符
解决std::vector<std::vector>写入文件的运算符不匹配问题
你碰到的no operator "<<" matches these operands错误,核心原因是C++标准库没给std::vector类型定义和std::ofstream配合的<<运算符,直接把std::vector<float>对象(也就是代码里的targetInputs[i])传给输出流自然会编译失败。
下面给两种可行的解决办法:
方法一:嵌套循环逐个写入元素
直接在现有循环里加一层遍历,把每个子vector里的float值逐个写入文件,还可以加分隔符让输出内容更规整:
std::ofstream raport; raport.open("test.txt", std::ios_base::app); std::vector<std::vector<float>> targetInputs = { {0.0f, 0.0f}, {1.0f, 1.0f}, {1.0f, 0.0f}, {0.0f, 1.0f} }; // 用范围for循环更简洁直观 for (const auto& sub_vec : targetInputs) { for (float num : sub_vec) { raport << num << " "; // 用空格分隔每个数值 } raport << "\n"; // 每个子vector写完换行,区分不同组的数据 }
方法二:重载<<运算符
如果需要多次往文件里写vector,可以给std::vector<float>重载<<运算符,之后就能像写基本数据类型一样直接输出vector:
#include <vector> #include <ostream> // 全局重载输出运算符 std::ostream& operator<<(std::ostream& os, const std::vector<float>& vec) { for (size_t i = 0; i < vec.size(); ++i) { os << vec[i]; // 最后一个元素后不加多余分隔符 if (i != vec.size() - 1) { os << " "; } } return os; } // 原代码修改后可以直接用<<输出子vector std::ofstream raport; raport.open("test.txt", std::ios_base::app); std::vector<std::vector<float>> targetInputs = { {0.0f, 0.0f}, {1.0f, 1.0f}, {1.0f, 0.0f}, {0.0f, 1.0f} }; for (const auto& sub_vec : targetInputs) { raport << sub_vec << "\n"; }
两种方法按需选择:嵌套循环适合临时写一次的场景,重载运算符适合需要频繁输出vector的场景。
内容的提问来源于stack exchange,提问作者Nir4s
相关产品推荐
相关产品推荐

