一、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. Predix Asset Service深度分析

    前言 在IIOT领域,面临着保存海量数据的挑战,具体到Asset层面,则要保存物理对象,逻辑对象,复杂的关系,并支持对象间的组合,分类,标签和高效查询.总结来说,可以归纳为如下几种需求:   灵活的建 ...

  2. python基础入门教程《python入门经典》

    第一章 在python中使用数字 1.用变量存储信息 1.1变量的类型 变量,用于存储很多不同的数据类型的信息. 基本数据类型 数据类型 存储内容 示例 integer 整   float 浮点   ...

  3. weather API 天气api接口 收集整理

    腾讯 http://sou.qq.com/online/get_weather.php?callback=Weather&city=南京 中国天气-weather.com.cn http:// ...

  4. phantomjs-prebuilt@2.1.14 install: `node install.js`

    在用vue-cli构建项目时,npm install 安装包的时候报错了. 错误信息: npm ERR! Failed at the phantomjs-prebuilt@2.1.14 install ...

  5. 一劳永逸的解决AFNetworking3.0网络请求问题(面向对象封装大法,block回调)

    AFNetworking在iOS网络请求第三方库中占据着半壁江山,前段时间将AFNetworking进行了3.0版本的迁移,运用面向对象的设计将代码进行封装整合,这篇文章主要为还在寻找AFNetwor ...

  6. IAM

    IAM 与 权限访问控制机制 IAM , Identity and Access Management 基本概念 ARN, Amazon Resource Name : 在 AWS 里, 创建的任何资 ...

  7. 使用requireJs的方法

    在你们对requireJs初步了解后,快来看看他们是怎么使用的吧. 在你下载完成require.js插件后,在页面里引入,在require.js 加载完之后,会查找页面上script标签的data-m ...

  8. 通过 itms:services://? 在线安装ipa ,跨过app-store

    1.需要一个html文件,引导下载用户在线安装ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&quo ...

  9. 批量自动更新SVN版本库 - Windows

    开发过程中每天都要从SVN代码库里一个一个的update各个项目代码,不仅效率实在是低,也不符合程序员的"懒"精神,由于是在Windows环境做开发,自然就想到了使用bat来实现自 ...

  10. 把angular项目整合到.net mvc中

    之前的开发选择的是完全舍弃服务端,仅保留最简单web服务器提供angular经打包的静态资源,此外所有的业务与数据请求都访问一个分离的WebApi来实现.不过最近碰到一个需求,有必要使用多个客户端,而 ...