C++如何按列读取文件 提取第一列最大值的实现方法
C++读取数字文件问题解答
一、查找第一列最大值是否需要先按列读取
不需要。你给出的文件是每行固定4个空格分隔的整数,仅查询第一列最大值时不需要全量按列存储所有数据,按行读取后仅提取每行第一个字段即可,性能开销更低。
二、代码实现
1. 仅查找第一列最大值
#include <iostream> #include <fstream> #include <climits> int main() { std::ifstream inputFile("numbers.txt"); // 替换为你的实际文件路径 if (!inputFile.is_open()) { std::cerr << "文件打开失败,请检查路径是否正确" << std::endl; return 1; } int firstCol, discard; int maxVal = INT_MIN; // 每次读取第一列后,丢弃当前行剩余3个数字即可 while (inputFile >> firstCol >> discard >> discard >> discard) { if (firstCol > maxVal) { maxVal = firstCol; } } std::cout << "第一列最大值为:" << maxVal << std::endl; inputFile.close(); return 0; }
运行上面的代码,你给出的示例文件输出结果为23。
2. 全量按列读取所有数据
如果后续有其他按列计算需求,可以将每列数据单独存储到容器中:
#include <iostream> #include <fstream> #include <vector> int main() { std::ifstream inputFile("numbers.txt"); if (!inputFile.is_open()) { std::cerr << "文件打开失败,请检查路径是否正确" << std::endl; return 1; } // 共4列,cols[0]对应第一列所有数据 std::vector<std::vector<int>> cols(4); int n1, n2, n3, n4; while (inputFile >> n1 >> n2 >> n3 >> n4) { cols[0].push_back(n1); cols[1].push_back(n2); cols[2].push_back(n3); cols[3].push_back(n4); } // 测试输出第二列所有数值 std::cout << "第二列所有数据:"; for (int num : cols[1]) { std::cout << num << " "; } inputFile.close(); return 0; }
补充说明:C++的流提取运算符
>>默认会自动跳过空格、换行符等空白字符,不需要你手动处理行分隔,只要文件结构是固定每4个数字为一组,不管换行规则如何都能正常读取。
内容的提问来源于stack exchange,提问作者xmoratax
相关产品推荐
相关产品推荐

