关于C++的sstream和结构体重载

首先说明这两个并没有关联,只是在一起看了罢了

一、sstream

复习下getline的用法,可以直接读入一行,包括空格

考虑这样一个题目:输入数据的每行包含若干个以空格隔开的整数,输出每行中所有整数之和。

(如果只能使用字符和字符数组,一般有两种方案:一是使用getchar()边读边算,代码较短,但容易写错qwq;二是每次读取一行再扫描该行的字符同时计算结果,但如果使用C++,代码可以很简单)

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
	string line;
	while(getline(cin, line)){
		int sum = 0, x;
		stringstream ss(line);
		while(ss >> x) sum += x;
		cout<<sum<<'\n';
	}
	return 0;
}

stringstream在sstream头文件中,用getline读取的一行创建一个“字符串流”——ss.接下来只需要像读取cin那样读取ss即可。【可以把string作为流进行读写,定义在sstream中】

【虽然string 和 sstream 都很方便,但string很慢,sstream更慢,应谨慎使用

二、“再谈”结构体

先上代码:

#include<iostream>
using namespace std;

struct Point{
	int x,y;
	Point(int x=0, int y=0):x(x),y(y){} //构造函数 
};

Point operator + (const Point& A, const Point& B){
	return Point(A.x+B.x, A.y+B.y);
}

ostream& operator << (ostream &out, const Point& p){
	out <<"(" <<p.x <<"," <<p.y <<")";
	return out; 
}

int main(){
	Point a, b(1,2);
	a.x=3;
	cout<< a+b <<'\n';
	return 0;
}

构造函数(ctor)是在声明变量时调用的,声明Point a, b(1,2)时分别调用了Point()和Point(a,b), "=0"的0为默认值,所以Point()==Point(0,0).":x(x),y(y)"是一个简单写法,表示“把成员变量x初始化为参数x,成员变量y初始化为参数y”.也可以写成:

Point(int x=0, y=0){this->x = x, this->y = y;}

这里的this指向当前变量的指针this->x意思是“当前对象的成员变量x”,即(*this).x

后面就是运算符重载了,搜了一下ostream

ostream表示输出流,英文"output stream"的简称.在 C++中常见的输出流对象就是标准输出流cout,很少自定义ostream的对象,更多的是直接使用cout。但"<<"只能输出整型、实型等普通类型,而对自定义的类型进行输出,就可以这样干了,写法都是一样的,只要重载<<操作符,配合ostream一起使用即可。(“该方法还可以扩展到其他很多地方”)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值