Stringstream 緩衝區清空方法 和 複用StringStream 不是clear那麼簡單
最近編寫程式時用到 int型別-->string型別的東西,後來發現結果老是有點不對。現在才知道是Stringstream 惹的禍。
用clear的話,記憶體會不斷增長。
在for迴圈中每次呼叫strStream.clear()是希望在每次使用完strStream之後清理strStream佔用的資源,但stringstream的clear方法並沒有真正地釋放strStream佔用的空間,這樣strStream所佔用的空間一直在增長。當size較大時,strStream消耗的記憶體迅速增長,可能出現嚴重問題。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{ //clear()很好解決複用問題但記憶體消耗大
int size = 100;
stringstream strStream;
for (int i = 1; i < size; ++i)
{
strStream.clear();
strStream << i;
string numStr;
strStream >> numStr;
cout<<numStr<<" ";
// strStream.str("");
}
cout<<endl;
printf("size=%d\n", strStream.str().capacity());
return 0;
}
解決方法在多次轉換中,使用同一個stringstream物件,需要使用其物件方法str來重置stringstream的buffer,這樣能確保stringstream佔用的記憶體不會越積越多。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
int size = 100;
stringstream strStream;
for (int i = 1; i < size; ++i)
{
strStream.clear();
strStream << i;
string numStr;
strStream >> numStr;
cout<<numStr<<" ";
strStream.str("");
}
cout<<endl;
printf("size=%d\n", strStream.str().capacity());
return 0;
}
總結:clear解決複用問題,
strStream.str("");//清空緩衝區
原文:https://blog.csdn.net/l631068264/article/details/25115917
版權宣告:本文為博主原創文章,轉載請附上博文連結!