【发布时间】:2013-04-08 12:15:04
【问题描述】:
我有一个打开的文本文件,光标在某个位置。我需要找到光标的行号。从性能的角度来看,以下哪种方法最好?
1) 将当前位置存储在变量 'pos' 中,并搜索从文件开头到 'pos' 的所有 '\n' 字符。
ifstream in("file.txt");
// move anywhere in the file
int lineNum = 0;
std::string line;
istream::pos_type pos = in.tellg();
in.seekg(0);
while ( std::getline(in, line) ) {
++lineNum;
if(in.tellg() >= pos) break;
}
2) 使用单独的 ifstream 执行相同的操作。
3) 还有什么吗?
【问题讨论】:
-
您如何进入当前位置?始终简单地跟踪光标所在的行可能是最有效的方法。
-
std::getline(in, std::string()) -
我很惊讶这个编译。据我所知,
istream::pos_type不应该支持>=。 (在 Unix 和 Windows 下,您可能可以通过将两者都转换为streamoff来获得相同的效果。不过,我认为这不能保证真正可移植。) -
@BenjaminLindley:已修复;谢谢!
标签: c++ position ifstream line-numbers