一、sstream头文件运用

题目:输入数据的每行包括若干个(至少一个)以空格隔开的整数,输出每行中所有整数之和。

#include<iostream>
#include<cstring>
#include<sstream>
using namespace std;
int main()
{
string line;
while(getline(cin,line)){
int sum=, x;
stringstream ss(line); //创建一个“字符串流”——ss
while(ss>>x) sum+=x; //像读取cin那样读取ss
cout<<sum<<endl;
}
}

二、再谈结构体struct

新的定义方式:

struct Point{
//code
};

特点:在struct内可以有成员函数。

struct Point{
int x,y;
Point(int x=,int y=):x(x),y(y) {} //默认参数,即Point()相当于Point(0,0)。
//函数Point无返回值,称为构造函数,其是在声明变量时调用的。
//“:x(x),y(y)”是一个简单的写法,表示把成员变量x初始化为参数x,成员变量y初始化为参数y。
};

与C++结合:可以重载运算符,为结构体定义“加法”,为结构体定义流输出方式。

struct Point{
int x,y;
Point(int x=,int y=):x(x),y(y) {} //也可写成Point(int x=0,int y=0){this->x=x;this->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;
}

应用举例:

 #include<iostream>
using namespace std;
struct Point{
int x,y;
Point(int x=,int y=):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(,);
a.x = ;
cout<< a+b <<endl; //输出(4,2)
}

三、模板

没有模板的求和:只能求一种数据类型数组的和。

 int sum(int* begin, int* end)
{
int *p = begin;
int ans = ;
for(int *p = begin; p != end; p++)
ans += *p;
return ans;
}

使用模板:下述函数可以给double数组和Point数组求和。

 template<typename T>
T sum(T* begin, T* end)
{
T *p = begin;
T ans = ;
for(T *p = begin; p != end; p++)
ans = ans + *p; //Point结构体中没有定义"+="运算符。
return ans;
}
 int main()
{
double a[] = {1.1, 2.2, 3.3, 4.4};
cout<<sum(a,a+)<<endl;
Point b[] = {Point(,), Point(,), Point(,), Point(,)}; //结构体数组
cout<<sum(b,b+)<<endl;
}

带模板的结构体:将上述的结构体Point编程模板。

 template <typename T>
struct Point{
T x,y;
Point(T x=,T y=):x(x),y(y) {}
};
template <typename T>
Point<T> operator + (const Point<T>& A, const Point<T>& B){
return Point<T>(A.x+B.x,A.y+B.y);
}
template <typename T>
ostream& operator << (ostream &out, const Point<T>& p){
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
 int main()
{
Point<int> a(,), b(,);
Point<double> c(1.1,2.2), d(3.3,4.4);
cout<<a+b<<" "<<c+d<<endl; //输出(4,6) (4.4,6.6)
}

初涉算法——C++的更多相关文章

  1. 初涉算法——STL初步

    一.头文件<algorithm> ①sort函数 sort使用数组元素默认的大小比较运算符进行排序,只有在需要按照特殊依据进行排序时才需要传入额外的比较函数: sort可以给任意对象排序( ...

  2. HDU 1874 畅通工程续(初涉dijkstra算法实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...

  3. 初涉KMP算法

    久仰字符串系列理论 KMP 讲解(引用自bzoj3670动物园) 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串S,它的长度为L.我们可以在O(L)的时间内,求出一个名为next的数组.有 ...

  4. HDU 2544 最短路(初涉SPFA算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...

  5. 最短路径:初涉Dijkstra算法

    模板题目:https://www.luogu.com.cn/problem/P1339 我的代码: #include<cstdio> #include<cstring> #in ...

  6. SIFT定位算法关键步骤的说明

    1. SIFT算法中一些符号的说明 $I(x,y)$表示原图像. $G(x,y,\sigma)$表示高斯滤波器,其中$G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}exp ...

  7. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  8. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  9. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

随机推荐

  1. Spring学习(9)--- @Autowired注解(二)

    可以使用@Autowired注解那些众所周知的解析依赖性接口,比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,Applicat ...

  2. vue init webpack-simple project 报错处理(connect ETIMEDOUT 192.30.253.112)

    Failed to download repo vuejs-templates/webpack-simple: connect ETIMEDOUT 192.30.253.113:443 Failed ...

  3. CoordinatorLayout+沉浸式状态栏

    没有gif 说个*B 注意看 状态栏的瑶瑟变化 (如果我是你 我不会去计较下边的toast) 之前为了这个效果我查了好多文章 博客什么的   ,,要么就是刚开始图片背景没有填充到状态栏下   要么就是 ...

  4. module.exports,exports,export和export default,import与require区别与联系【原创】

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  5. RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe)

    (本教程是使用Net客户端,也就是针对微软技术平台的)   在前一个教程中,我们创建了一个工作队列.工作队列背后的假设是每个任务会被交付给一个[工人].在这一部分我们将做一些完全不同的事情--我们将向 ...

  6. flask笔记二

    web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...

  7. 探索Windows命令行系列(3):命令行脚本基础

    1.实用功能 1.1.为脚本添加注释 1.2.控制命令的回显 1.3.使用数学表达式 1.4.向脚本传递参数 2.使用变量 2.1.变量的命名及定义 2.2.调用变量 2.3.变量的作用域 3.结构语 ...

  8. isNaN() 函数用于检查其参数是否是非数字值。如果是非数字值则返回true

    isNaN() 函数用于检查其参数是否是非数字值.如果是非数字值则返回true.document.write(isNaN(0)); falsedocument.write(isNaN("He ...

  9. php添加pcntl扩展(Linux)

    pcntl扩展可以支持php的多线程操作(仅限linux)原本需要重新编译PHP的后面configrue提示加上--enable-pcntl 由于我的php是采用yum安装的,所以不能采用上面的方式下 ...

  10. Linux系统vi模式下显示行号

    在命令模式下输入:set nu或者:set number都可以为vi设置行号,如果要取消的话,则输入:set nonu行号的设置是vi的环境设置,不会影响文本的内容.