结构体+模版

代码:

#include<iostream>
using namespace std;
template <typename T>
struct Point{
    T x,y;
    Point(T x=0,T y=0)/*:x(x),y(y)*/{
    this->x=x;
    this->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<<")";
}
template<typename T>T sum(T *begin,T *end){
    T ans=0;
    for(T *p=begin;p!=end;p++){
        ans=ans+*p;
    }
    return ans;
}
int main(){
    Point<int> a;
    Point<int> b(1,2);
    a.x=3;
    Point<int> c=a+b;
    cout<<c<<endl;
    double m[]={1.1,2.2,3.3,4.4};
    cout<<sum(m,m+4)<<endl;
    Point<double> n[]={Point<double>(1.1,2.2),Point<double>(3.3,4.4),Point<double>(5.5,6.6),Point<double>(7.7,8.8)};
    cout<<sum(n,n+4)<<endl;
    return 0;
}
时间: 2024-08-26 08:32:39

结构体+模版的相关文章

pair&lt;&gt;结构体模版的用法

1.pair算是一个结构体模版,定义的时候是这样的: pair<T1,T2> P; 其中T1,T2可以是int,string,double,甚至是vector<>. 2.进行初始化是这样的: pair<int,int> a(12,34); 也可以借用make_pair()函数: pair<int,int> a; a=make_pair(12,34); 3.进行调用是很简单的: pair<int,int> a(12,34); printf(&quo

C到C++ 快速过度 C 结构体到类

还记得C语言中的结构体么?struct Point{    double x;    double y;};上面的代码是一个"结构体模版",我们利用它创建了一个叫做Point的类型. 在这之后,我们就可以像声明基本类型的变量一样声明Point类型:Point ob; ob叫做结构体Point的一个"实例". 而当我们 int n; 的时候,会讲n是int类型的一个"变量". 结构体是一种复合类型,但是它和同样身为复合类型的数组不同: <!-

C语言结构体点滴

结构的本质是C语言的一种数据抽象,通俗的说,是基本数据类型的重组.为什么要重组呢?因为基本数据类型不够用了.为什么不够用了呢?因为需要的信息类型太多了.这是一个很大的话题.信息本来是没有什么类型之分的,但是为了便于在计算机内部的管理,人们在C语言中把信息先分成了基本的几个类型,比如整型.浮点型.字符型.布尔型等等.但是呢,描述一个事物的全部信息有时候仅用一种基本类型是不够的,比如一本书的基本属性:作者(字符型).价格(浮点型).出版日期(我也不知道什么型).书名(字符型).然而操蛋的是,我们要处

关于结构体

1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构. typedef struct People { int a; char b; double c; }P: 其中:struct是关键词, People是标签, a b c是成员, P是此结构体声明的变量. 于是在声明变量的时候就可:P p1; 这里的P实际上就是struct People的别名.P==struct People 另外这里也可以不写People(于是也不能struct People p1;了,

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

结构体的大小

系统在存储结构体变量时存在地址对齐问题,编译器在编译程序时会遵循两条原则: 一.结构体变量中成员的偏移量必须是成员大小的整数倍: 二.结构体大小必须是所有成员大小的整数倍. 1 #include<stdio.h> 2 3 struct a{ 4 int i; 5 float f; 6 char c; 7 double d; 8 long l; 9 }b; 10 11 int main(){ 12 printf("%d\n",sizeof(b.i));// 4 13 prin

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFrom

38-oc常用结构体

常用结构体 在开发中苹果推荐我们使用CG开头的结构体, 也就是说NS开头的结构体一般不用 OC中定义一个点,用什么结构体 NSPoint; CGPoint point = NSMakePoint(10, 20); OC中保存物体尺寸的,用什么结构体 NSSize; CGSize size = NSMakeSize(100, 50); OC中保存某个物体的位置和尺寸,用什么结构体 NSRect; CGRect rect = NSMakeRect(10, 20, 100, 50); NSNumber