一、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. 分享几个python小脚本

    by 梁凯 今天我想给大家分享几个python脚本,分别是: 1.公司访问外网认证脚本(最初有同事写过,我优化了一下). 2.统计周报系统所有同事的最近一篇周报. 3.统计测试技术分享里指定一个月所有 ...

  2. Android搞事篇——使用Intent跳转界面

    跳转页面基本分为三个步骤: 1.初始化一个intent:(一个intent就够用了): 2.传入intent参数: 3.调用startactivity();实现跳转页面 具体操作如下 首先你需要一个项 ...

  3. java之内部类

    最近学了java,对内部类有一点拙见,现在分享一下 所谓内部类(nested classes),即:面向对象程序设计中,可以在一个类的内部定义另一个类. 内部类不是很好理解,但说白了其实也就是一个类中 ...

  4. JavaScript 特效三大系列总结

    一. offset系列 1. offset系列的5个属性 1. offsetLeft : 用于获取元素到最近的定位父盒子的左侧距离 * 计算方式: 当前元素的左边框的左侧到定位父盒子的左边框右侧 * ...

  5. git初步用法

    三.       Gerrit的注册及使用 1.         简介 Gerrit为代码审核工具,git提交的代码,必须经过审核才能合入到正式的版本库中. 2.         注册步骤 (1)   ...

  6. MATLAB仿真中连续和离散的控制器有何区别?

    matlab系统同时提供连续和离散的控制器和对象的目的是:在降低用户使用复杂程度的同时提高仿真精度.仿真速度和应用的广泛性. 仿真步长和求解精度的概念对于理解这个问题至关重要. 首先是步长,步长和求解 ...

  7. 下载旧版chrome

    问题描述: xp只能使用chrome 49及其之前的版本,去哪里下载? 解决办法: 1. 在这里 http://www.slimjet.com/chrome/google-chrome-old-ver ...

  8. Log4PHP 配置和使用

    Log4PHP2.3.0使用解释 1. 什么是Log4PHP Log4php它为apche组织维护项目,是Log4xx系列日志组件之一,log4j在JAVA中可算是大名鼎鼎的日志开发包.Log4PHP ...

  9. CSS中的尺寸单位

    绝对单位 px: Pixel 像素 pt: Points 磅 pc: Picas 派卡 in: Inches 英寸 mm: Millimeter 毫米 cm: Centimeter 厘米 q: Qua ...

  10. python+NLTK 自然语言学习处理二:文本

    在前面讲nltk安装的时候,我们下载了很多的文本.总共有9个文本.那么如何找到这些文本呢: text1: Moby Dick by Herman Melville 1851 text2: Sense ...