stringstream中clear()和str(”“)的区别

来源:互联网 发布:mac os x输入法切换 编辑:程序博客网 时间:2024/06/05 03:33

区别:

clear():清除流的状态标志,但不会改变流中的内容。

str(”“):清空流中的数据,相当于无论之前流中的数据是什么,使用str(”“)之后,流数据为空,并且将状态符固定。

例1:两者均无的实例

#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;//插入int数据,插入后,流的eofbit位固定,所以流将不再接受数据
aa>>m;//装换为字符串m=”123“
aa<<b;//eofbit位固定,不会接收b
aa>>n;//n=”“
cout<<m<<endl<<n<<endl<<aa.str()<<endl;//流的内容仍然为”123“
}

运行结果:

123


123

例2:仅使用clear()

#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;
aa>>m;
aa.clear();//清除了流的eofbit位(failbit,badbit),使流能继续接受数据,但是流之前的内容并未清除
aa<<b;//b的数据传入流
aa>>n;
cout<<m<<endl<<n<<endl<<aa.str()<<endl;
}

运行结果

123

456

123456

例3:仅使用str(”“)

#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;
aa>>m;
aa.str("");//清空了流的内容,同时再次固定了eofbit位,流将不再接收数据
aa<<b;
aa>>n;
cout<<m<<endl<<n<<endl<<aa.str()<<endl;//运行结果将有两个空白行
}

运行结果:

123



例4:同时使用

#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;
aa>>m;
aa.clear();
aa.str("");
aa<<b;
aa>>n;
cout<<m<<endl<<n<<endl<<aa.str()<<endl;
}

运行结果:

123

456

456

从四个例可以看出

1.如果要多次利用stringstream进行类型转换,必须使用str(”“),否则占用内存将不断扩大;

2.使用str(”“)后,流的eofbit位固定了,再次进行类型转换时,需要清除状态位,所以要使用clear();

0 0
原创粉丝点击