初涉算法——C++
一、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++的更多相关文章
- 初涉算法——STL初步
一.头文件<algorithm> ①sort函数 sort使用数组元素默认的大小比较运算符进行排序,只有在需要按照特殊依据进行排序时才需要传入额外的比较函数: sort可以给任意对象排序( ...
- HDU 1874 畅通工程续(初涉dijkstra算法实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...
- 初涉KMP算法
久仰字符串系列理论 KMP 讲解(引用自bzoj3670动物园) 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串S,它的长度为L.我们可以在O(L)的时间内,求出一个名为next的数组.有 ...
- HDU 2544 最短路(初涉SPFA算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...
- 最短路径:初涉Dijkstra算法
模板题目:https://www.luogu.com.cn/problem/P1339 我的代码: #include<cstdio> #include<cstring> #in ...
- SIFT定位算法关键步骤的说明
1. SIFT算法中一些符号的说明 $I(x,y)$表示原图像. $G(x,y,\sigma)$表示高斯滤波器,其中$G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}exp ...
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
随机推荐
- Common.Logging源码解析二
Common.Logging源码解析一分析了LogManager主入口的整个逻辑,其中第二步生成日志实例工厂类接口分析的很模糊,本随笔将会详细讲解整个日志实例工厂类接口的生成过程! (1).关于如何生 ...
- 渗透测试工具Nmap从初级到高级
Nmap是一款网络扫描和主机检测的非常有用的工具. Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统.Nmap ...
- jsp 文件使用 include指令 导入 jspf 分析,及导入jspf 文件后出现乱码问题
1.为什么要导入jspf文件 在做网站开发中,因为有很多的页面的导航栏是相同的,所以我们要把导航栏提取出来,生成一个jspf文件. 然后在jsp页面中使用 include 指令 导入jspf文件,这样 ...
- cadence pcb 设计学习记录提纲
Cadence软件是一款"一站式"的电气EDA软件系统.因能力所限,此处仅涉及使用cadence软件绘制PCB.日后随着对软件使用程度的加深,自己打算学习使用cadence软件的原 ...
- springmvc 之 Controller
一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...
- 小试牛刀JavaScript鼠标事件
鼠标事件练习1 当鼠标点击网页某个单元格的时候,其他的单元格颜色不变,只有被点击的单元格颜色发生变化 <style type="text/css"> *{ margin ...
- python 标准库 -- requests
一. 安装 $ pip install requests requests 并不是python 标准库, 但为了汇总方便, 将其放置于此. 二. 用法 requests.get() : GET 请求 ...
- SICP-Elements of program
编程语言=组合简单形成复杂的工具 简单的声明和表达式 简单元素之间的组合方式 组合后元素的抽象方式 程序=数据+函数 数据是我们要处理的内容 函数是我们处理数据的方式 函数式与中缀式 函数式不会出现歧 ...
- 细说Nullable<T>类型
目录一.简介二.语法和用法三.类型的转换和运算四.装箱与拆箱五.GetType()方法六.ToString()方法七.System.Nullable帮助类八.语法糖 一.简介 众所周知,值类型变量不能 ...
- [leetcode-593-Valid Square]
Given the coordinates of four points in 2D space, return whether the four points could construct a s ...