1. 程式人生 > >Stringstream 緩衝區清空方法 和 複用StringStream 不是clear那麼簡單

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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!