一、C++结构体

#include <iostream>
using namespace std;
struct Point{
int x;
int y;
Point(int x=0,int y=0):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 A){
out<<'('<<A.x<<','<<A.y<<')'<<endl;
}
int main()
{
Point a(1,2);
Point b(2,3);
cout<<a+b<<endl;
}

注意

  1. 在C++中定义struct类型,可以直接用,可以不再用typedef取别名
  2. 对结构体编写重构函数参考实例如上
  3. 结构体可以有成员函数,而且有它独有的初始化方式,
  4. C++中的函数参数可以拥有默认值
  5. C++结构体可以有多个构造函数
  6. 以上,同样在class中适用

二、模板

#include <iostream>
using namespace std;
struct Point{
int x;
int y;
Point(int x=0,int y=0):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 A){
out<<'('<<A.x<<','<<A.y<<')'<<endl;
}
// template sum
template<typename T>
T sum(T *p,T *q){
T result=0;//initiate 0*****
while(p!=q){
result=result+*p;
p++;
}
return result;
}
int main()
{
Point points[4]={Point(0,0),Point(1,1),Point(2,2),Point(3,3)};
cout<<sum(points,points+4)<<endl;
}

三、STL

3.1 排序与检索

例题1

现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序;然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。

(在样例中,为了节约篇幅,所有大理石的数合并到一行,所有问题也合并到一行。)

样例输入:

4 1

2 3 5 1

5

5 2

1 3 3 3 1

2 3

样例输出:

CASE# 1:

5 found at 4

CASE# 2:

2 not found

3 found at 3

#define LOCAL
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX=100;
int main()
{ #ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
int n,q;
int object;
int time=0;
int array[MAX];
while(scanf("%d%d",&n,&q)==2 && n){ printf("CASE# %d:\n",++time);
//input n numbers
int i=n;
while(i--)scanf("%d",&array[i]);
sort(array,array+n);//use sort c++ gives while(q--){
scanf("%d",&object);
//find
int p=lower_bound(array,array+n,object)-array;//to find the index of the object in array
if(array[p] == object) printf("%d found at %d\n",object,p+1);
else printf("%d not found\n",object);
}
}
return 0;
}

以上注意:

  1. 重定向操作,在本地可以这么做,放到oj上要改变写法,所以用ifdef的预定义方式。
  2. sort是一个模板函数,可以接收任何有<运算的类型
  3. 可以对普通数组array进行排序,也可以对vector进行排序,vector的排序方式为sort(v.begin(),v.end());
  4. lower_bound()函数接受三个参数,一二两个是数组的起始位置,第三个是待查找的元素,表示在数组中寻找第一次大于或者等于待查元素的位置。
  5. scanf()的返回值:正确输入的变量个数,注意正确包括类型正确,个数正确。

3.2 vector

vector的使用方法请参见此链接

C++ ACM基础的更多相关文章

  1. JAVA ACM 基础

    java ACM Java做ACM-ICPC的特点: (1) 在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢 ...

  2. ACM基础算法入门及题目列表

    对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访 ...

  3. java编程acm基础

    java还是不错的昂! import java.util.*; import java.io.*; public class text{ static int a=100; public static ...

  4. ACM基础(一)

    比较大的数组应尽量声明在main函数外,否则程序可能无法运行. C语言的数组并不是“一等公民”,而是“受歧视”的.例如,数组不能够进行赋值操作: 在程序3-1中,如果声明的是“int a[maxn], ...

  5. Python3 acm基础输入输出

    案例一:输入字符串分割并转化成多个int数值 a, b= map(int, input().split()) try: while True: a, b= map(int, input().split ...

  6. ACM基础板子

    新生赛以后就正式成为一名acmer啦 ~虽然没有打过比赛呜呜呜 要好好学算法,拿一个牌牌嘛~ 这里就记录算法学习情况,也怕自己偷懒,学一个就记录,看看长时间拖更就是在摸鱼,摸鱼和鸽子都是本质 ,加油! ...

  7. 【题解】【排列组合】【素数】【Leetcode】Unique Paths

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  8. JSU 2013 Summer Individual Ranking Contest - 5

    JSU 2013 Summer Individual Ranking Contest - 5 密码:本套题选题权归JSU所有,需要密码请联系(http://blog.csdn.net/yew1eb). ...

  9. ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha

    ssh的DH秘钥交换是一套复合几种算法的秘钥交换算法.在RFC4419中称为diffie-hellman-groupX-exchange-shaX 的算法(也有另一种单纯的 rsaX-shaX 交换算 ...

随机推荐

  1. CSS属性: 阴影 轮廓 渐变

    注: 本文摘自 宁静致远 - CSDN / 但愿人长久 千里共婵娟 - CSDN 阴影 使用box-shadow属性可以为元素添加阴影效果, 比如 box-shadow: h-shadow v-sha ...

  2. 关于Array的操作

    使用Array创建数组 // 使用Array 构造函数 var colors = new Array(); // 预先给数组项数量 var colors = new Array(20); // 向Ar ...

  3. 关于 class 的命名

    class名称中只出现小写字符和破折号 使用有组织或目的明确的名称,不使用表现形式 基于最近的的父class 作为新class的前缀 使用 .js-* 来标识行为,并且不要将这些class包含到css ...

  4. hdu 1010 Tempter of the Bone(dfs)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. Openstack实践(1)部署使用实例及neutron网络

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 如何快速部署使用openstack,使用kolla吧,o ...

  6. recommendation baselines

    整理recommendation baseline 的实现代码和方法归类: bpr:  https://github.com/gamboviol/bpr fpmc:  https://github.c ...

  7. mysql 免安装版安装(window7)

    初次使用mysql免安装版步骤: 1.设置环境变量,将mysql 加压文件路径添加到环境变量path中(作用是不用每次都切换路径) 控制面板>系统和安全>系统>高级系统设置 2.安装 ...

  8. selenium借助send_keys实现上传(以网易邮箱为例)

    #code:utf-8from selenium import webdriverimport time#网易163邮箱dr = webdriver.Firefox()file_path = 'htt ...

  9. hibernate mysql 分页时报错 显示的代码和sql server 类似 select top 1……

    [ERROR][com.alibaba.druid.filter.stat.StatFilter]merge sql error, dbType mysql, sql : select top 1 d ...

  10. Eclipse环境下配置Tomcat,并且把项目部署到Tomcat服务器上

    一 配置Tomcat 1.打开Eclipse,单击"Window"菜单,选择下方的"Preferences". 2.单击"Server"选项 ...