C++入门笔记(1)
前言笔记整理自mooc程序设计与算法(三)C++面向对象程序设计
郭炜老师讲的还是很清楚的
第一章:从 C 到C++引用
类型名 & 引用名 = 某变量名;
12int n = 4; int & r = n;
r引用了n,r的类型是int &
之后对r的修改就是对n的修改,对n的修改就是对r的修改
定义引用时一定要将其初始化成引用某个变量,之后不会再引用其他变量
在C语言中,我们可以通过指针实现两个数交换
1234567void swap( int * a, int * b){int tmp;tmp = * a; * a = * b; * b = tmp;}int n1, n2;swap(& n1,& n2) ;
有了C++的引用以后,可以这样写
1234567void swap( int & a, int & b){int tmp;tmp = a; a = b; b = tmp;}int n1, n2;swap(n1,n2) ;
引用作为函数的返回值
1234567891011int n = 4;int & Set ...
旧题整理
郑轻oj1124: 两个有序数组合并题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。
输出
输出合并后的m+n个整数,数据之间用空格隔开,输出占一行。
样例输入
124 1 2 5 73 6 4 2
样例输出
17 6 5 4 2 2 1
1234567891011121314151617181920212223242526272829303132333435#include <stdio.h>#include <stdlib.h>int a[1000010],b[1000010];int main(){ int i,j; int m,n; scanf("%d",&m); for(i=m-1; i>=0; i--) scanf("%d",&a[i]); scanf("%d",&n) ...
算法学习(2)
STL 初步sort用法sort排序区间为下标范围为[n1,n2)的元素
从小到大排序:
1sort(数组名+n1,数组名+n2);
从大到小排序:
1sort(数组名+n1,数组名+n2,greater<type>());
自定义排序规则:
sort函数的第三个参数可以是函数对象也可以是函数指针;
1.cmp
如:
1234567 bool cmp (int a,int b){ return a > b;} bool cmp (stu a,stu b){ return a.score > b.score;} sort(a,a+len;cmp);
2.重载
如:
1234567891011struct rule{ bool operator() ( const T & name1,const T & name2) const { return name1 < name2; }}; struct rule { bool operator() (const Student & s1,const Student & s2) ...
寒假冬训营数学专题题解
第22组数学专题题解A - A^B Mod C传送门
思路:快速幂
1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;typedef long long ll;ll qm(ll a,ll b,ll mod){ ll res=1; a%=mod;//a不能太大 while(b){ if(b&1)//如果b为奇数 res=(res*a)%mod; a=(a*a)%mod; b>>=1;//位运算每轮b除二 } return res;}int main(){ ll a,b,mod,res; cin>>a>>b>>mod; res=qm(a,b,mod); cout<<res; return 0;}
B - 逆元思路:输出前(p-1)个数的逆元,但用常规方法会超时,但我们发现前(p-1)个数的逆元中,1~p-1 ...
寒假冬训营搜索专题题解
搜索专题第22组题解写题之前你至少要搞懂深搜,广搜的原理,队列(先进先出)和栈(后进先出)的特点
深搜用堆栈存储,深搜的路径像面条一样,牺牲时间换空间,适用于求全部解的题等
广搜用队列存储,广搜的路径像水波一样,是往四周蔓延的,牺牲空间换时间,适用于求最短解的题等
A - 棋盘问题建议先看全排列
12345678910111213141516171819202122232425262728293031323334#include<bits/stdc++.h>using namespace std;int vis[30],n,k,sum,m;char a[30][30];void dfs(int p){ if(k==m){ sum++; return; } if(p>=n) return; for(int j=0;j<n;j++){ if(vis[j]==0&&a[p][j]=='#'){ vis[j]=1;//依旧先标记后复原 m++; dfs(p+1); vis[j]=0; m--; } } dfs(p+1);}i ...