C++使用ofstream写入二维vector到txt时出现operator<<不匹配错误
错误原因
编译报错的核心是C++标准库没有为std::vector<std::vector<std::string>>类型预定义operator<<的实现,你不能直接将整个二维vector对象通过ofstream输出流写入文件。你收到的报错信息翻译为:错误:没有匹配的'operator<<'运算符(操作数类型为'std::ofstream'即'std::basic_ofstream
修复方案
方案1:直接遍历二维vector输出(最简便,无需额外定义函数)
将你代码中
ofstream myfile("test1.txt"); myfile<<array; myfile.close();
这三行替换为以下逻辑即可:
ofstream myfile("test1.txt"); // 遍历每一行 for (size_t i = 0; i < array.size(); ++i) { // 遍历当前行的每个字段 for (size_t j = 0; j < array[i].size(); ++j) { myfile << array[i][j]; // 字段之间加制表符分隔,也可以换成逗号、空格等自定义分隔符 if (j != array[i].size() - 1) { myfile << "\t"; } } // 每行结束加换行 myfile << "\n"; } myfile.close();
方案2:自定义重载<<运算符(适合需要多次输出二维vector的场景)
可以在main函数之前自定义通用的二维vector输出运算符,后续就可以直接用myfile << array的写法:
// 重载二维vector的<<运算符 template <typename T> std::ostream& operator<<(std::ostream& os, const std::vector<std::vector<T>>& arr) { for (size_t i = 0; i < arr.size(); ++i) { for (size_t j = 0; j < arr[i].size(); ++j) { os << arr[i][j]; if (j != arr[i].size() - 1) { os << "\t"; } } os << "\n"; } return os; }
添加这段代码后,你原来的myfile << array写法就可以正常运行。
内容的提问来源于stack exchange,提问作者amril shah
相关产品推荐
相关产品推荐

