我发现标准字符串添加速度非常慢所以我正在寻找一些可以加速我的代码的技巧/黑客.
我的代码基本结构如下:
inline void add_to_string(string data,string &added_data) { if(added_data.length()<1) added_data = added_data + "{"; added_data = added_data+data; } int main() { int some_int = 100; float some_float = 100.0; string some_string = "test"; string added_data; added_data.reserve(1000*64); for(int ii=0;ii<1000;ii++) { //variables manipulated here some_int = ii; some_float += ii; some_string.assign(ii%20,'A'); //then we concatenate the strings! stringstream fragment; fragment<<some_int <<","<<some_float<<","<<some_string; add_to_string(fragment.str(),added_data); } return; }
做一些基本的分析,我发现在for循环中使用了大量的时间.我能做些什么可以大大提高速度吗?使用c字符串而不是c字符串会有帮助吗?
解决方法
如果不在循环中调用add_to_string,则可以节省大量字符串操作.
我相信这也是一样的(虽然我不是C专家,也不知道stringstream
究竟是什么):
stringstream fragment; for(int ii=0;ii<1000;ii++) { //variables manipulated here some_int = ii; some_float += ii; some_string.assign(ii%20,'A'); //then we concatenate the strings! fragment<<some_int<<","<<some_string; } // inlined add_to_string call without the if-statement ;) added_data = "{" + fragment.str();