字符串流sstream[part2/使用同一个字符串流反复读写数据]

  stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议:
    1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit);
    2:调用str("")将缓冲区清零,清除脏数据

  在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。 

//验证字符串流不会主动释放内存
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
    ostringstream foo("hello world");
    cout<<foo.str()<<endl;        //hello world
    cout<<foo.str()<<endl;        //hello world

    istringstream bar("hello world");
    string word;
    while(bar>>word)
        cout<<word;               //helloworld
    cout<<endl;    
    cout<<bar.str()<<endl;        //hello world

    stringstream ss;
    string str;
    while(1)
    {
        ss<<"abcdefg";
        ss>>str;
        cout<<"Size of stream = "<<ss.str().length()<<endl;        //7\n14\n21\n28...
        ss.clear();            //重复使用同一字符串流,注意clear()
         system("pause");
    }
    system("pause");
    return 0;
}
//清除错误标识及清空string buffer
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
    stringstream ss("hello world");
    char ch;
    while(ss.get(ch))
        cout<<ch;                  //hello world
    cout<<endl;

    ss.clear();                    //清除ss.get()置位的failbit
    ss.str("");                    //清空string buffer
    ss<<"hello c++";    
    cout<<ss.str()<<endl;

    system("pause");
    return 0;
}
posted @ 2015-05-16 17:03  codeplayplus  阅读(269)  评论(0编辑  收藏  举报