C++ostringstream用法

ostringstream用法

1.类型转换

要求包含头文件;

字符串和int之间的互相转换;

int num = 100;
string str = "";
std::ostringstream oss;
oss << num;
oss >> str;	//str结果为"100";

可用于自定义类型转换,类之间转换;

class A
{
    int a;
}
class B
{
    int b;
}
A a;
B b;
std::ostringstream oss;
oss << a;
oss >> b;	

可以写成泛型类同来互转;

template<class T>
void to_string(string& result,const T& t)
{
	std::ostringstream oss;
	oss<<t;
	result = oss.str();
}

//调用端
std::string str;
to_string(str,3.1415926);
to_string(str,false);

//两种类型之间转换
template<class out_type,class in_value>
out_type convert(const in_value & t)
{
	std::stringstream stream;
	stream<<t;//向流中传值
	out_type result;//这里存储转换结果
	stream>>result;//向result中写入值
	return result;
}

double d;
string s="12.56";
d=convert<double>(s);	//d等于12.56
s=convert<string>(9000.0);

2.代替sprintf拼接字符串

通常我们字符串拼接使用两种方式:

1.直接string相加,这种是很方便但是会造成内存碎片;

2.sprintf,这种第一个参数是char数组,不好判定长度的情况下,导致我们开很大的无用空间;

ostringstream恰好可解决这种问题:

std::ostringstream oss;
int a = 100;
std::string result;
oss << "aaa" << a;
result = oss.str();
std::cout << result;

std::cout << std::endl;

std::string str = "score:";
int score = 100;
char buff[100];
sprintf_s(buff, "score:%d", 100);

std::cout << buff;

输出结果:

3.使用ostringstream好处

1.不需要开多余的内存,不用担心缓冲区溢出;

2.一个作用域内,一个流可以重复使用,不需要重新创建;但是用之前需要clear();

posted @   小紫苏  阅读(2536)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示