我正在尝试阅读~36KB,完成此循环需要大约20秒:
ifstream input_file;
input_file.open("text.txt");
if( !(input_file.is_open()) )
{
cout<<"File not found";
exit(1);
}
std::string line;
stringstream line_stream; //to use << operator to get words from lines
int lineNum=1;
while( getline(input_file,line) ) //Read file line by line until file ends
{
line_stream.clear(); //clear stream
line_stream << line; //read line
while(line_stream >> word) //Read the line word by word until the line ends
{
//insert word into a linked list...
}
lineNum++;
}
input_file.close();
任何帮助都将不胜感激。
答案 0 :(得分:6)
stringstream::clear()
并未清除其中的所有上下文。它仅重置错误和EOF标志,请参阅http://en.cppreference.com/w/cpp/io/basic_ios/clear。
结果是你的line_stream
累积了所有前面的行,而内循环会一次又一次地在所有累积的行上运行单词。
因此,您所花费的总时间约为O(n ^ 2),而O(n)则与您预期的相比。
不是在每一行中使用相同的对象,而是可以在while循环中定义新的line_stream
实例,以获得全新且空的实例。像这样:
fstream input_file;
input_file.open("text.txt");
if( !(input_file.is_open()) )
{
cout<<"File not found";
exit(1);
}
std::string line;
int lineNum=1;
while( getline(input_file,line) ) //Read file line by line until file ends
{
stringstream line_stream; // new instance, empty line.
line_stream << line; //read line
while(line_stream >> word) //Read the line word by word until the line ends
{
//insert word into a linked list...
}
lineNum++;
}
input_file.close();
答案 1 :(得分:0)
您可以尝试以下操作:
<ImageView
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="0dp"/>
我在11毫秒内运行了你的代码,但是在8毫秒内提到了选项。可能对你有用。
答案 2 :(得分:0)
尝试使用构建标记-O2
或-O3
进行编译。
我很惊讶地看到一个简单的for循环读取一个1GB的文件需要4.7秒,而另一种高级语言(Dart)只需3.x秒就可以完成。
启用此标志后,运行时间降至2.1秒。