C++ 一个问题:每次读取一个字符存入一个string中,最少读取100个字符,应该如何提高程序的性能?(C++ Primer 9.37 习题)

博客探讨了如何在C++中提高读取字符并存储到string中的性能。通过分析string的内存分配策略,指出在已知至少读取100个字符的情况下,使用`reserve()`预先分配足够的容量可以显著减少内存重新分配次数,从而提升程序效率。实验结果显示,相对于不使用`reserve()`,在添加1000个元素时,性能提升了2倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

假设希望每次读取一个字符写入一个string中,且已知最少读取100个字符,考虑应该如何提高程序的性能?


答:

一下代码执行结果揭示了string 内存分配策略,string 的内存分配和vector一样, 默认情况下capacity 都是以2的n 次方增长的,  详细内容见前面的一篇“vector的自增长及顺序容器的选择”

void printSizeInfo(string & s)
{
    cout<<"size: "<<s.size()<<endl;
    cout<<"capacity: "<<s.capacity()<<endl;
    cout<<"maxsize: "<<s.max_size()<<endl;
    cout<<endl;
}



int main(int argc, char* argv[])
{
   string s;
   printSizeInfo(s);

   for(string::size_type i = 0 ; i< 50 ; ++i)
   {
       s.push_back(i);
       printSizeInfo(s);
   }

   return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值