【发布时间】:2012-12-13 01:04:58
【问题描述】:
我发现标准字符串添加非常慢,所以我正在寻找一些可以加快我拥有的一些代码的提示/技巧。
我的代码基本结构如下:
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++ 字符串会有所帮助吗?
【问题讨论】:
-
“做一些基本的分析,我发现在 for 循环中使用了很多时间。” 那么,这些时间还会用在什么地方呢? ,?这是整个程序!
-
@user788171 我不这么认为,
std::string上的常规加法运算符显式创建了一个新对象。与参数相同,特别是因为它不是 const。 -
@user788171:我认为最好是样本能反映这一点。
-
@user788171:已经讨论了一千次了。
sprintf速度更快,但如果您输入错误,sstream不会擦除您的硬盘。
标签: c++ string performance