我在Windows上使用CodeBlocks和TDM-GCC编译器。
问题在于,当我合并getline
和substr
时,第一次运行很慢(需要15-16秒)。
这是一个缓慢的案例:
#include <fstream>
#include <string>
using namespace std;
int main()
{
string test;
ifstream file("test.txt");
getline(file,test);
test.substr(2);
file.close();
return 0;
}
另一方面,这些程序(仅发布main())运行速度很快(第一次运行时约1秒):
{
string test = "testing";
ifstream file("test.txt");
test.substr(2);
file.close();
return 0;
}
{
string test;
ifstream file("test.txt");
getline(file,test);
file.close();
return 0;
}
{
string test = "testing";
ifstream file("test.txt");
getline(file,test);
test.substr(2);
file.close();
return 0;
}
所以getline
或substr
本身并不慢,如果我在getline
之前初始化字符串(也适用于std::string test; test = "testing";
)
我还要指出,我不是在讨论编译时,而是讨论可执行文件的首次运行。如果我将可执行文件复制到另一个位置,那么慢速首次运行条件也是如此 - 它在每个新位置第一次变慢。其他运行(慢或快速版本)的运行时间不到0.05秒。
你能解释一下这种行为吗?你能否提出另一种解决方案(可能包括一些包含或编译器设置)来避免这个问题?