C++语言学习
bugplus-free
花有重开日,人无在少年
展开
-
多态,虚函数的使用题目样例(几何形体处理程序)
几何形体处理程序: 输入若干个几何形体的参数, 要求按面积排序输出。输出时要指明形状。 Input: 第一行是几何形体数目n(不超过100).下面有n行,每行以一个字母c开头. 若 c 是 ‘R’,则代表一个矩形,本行后面跟着两个整数,分别是矩形的宽和高; 若 c 是 ‘C’,则代表一个圆,本行后面跟着一个整数代表其半径 若 c 是 ‘T’,则代表一个三角形,本行后面跟着三个整数,代表三条边的长度 Output: 按面积从小到大依次输出每个几何形体的种类及面积。每行一个几何原创 2022-04-12 12:39:49 · 553 阅读 · 0 评论 -
有关cin和cout的重构问题
假定c是Complex复数类的对象,现在希望 写“cout << c;”,就能以“a+bi”的形式输出c的值,写“cin>>c;”,就能从键 盘接受“a+bi”形式的输入,并且使得 c.real = a,c.imag = b。一般来说,对于初学的话,最好的写法就是以下的写法,那些只输出一个<<的比较难以实现,而且对于iostream的成员函数不能随意更改,能更改的就像我写的这种,定义为全局函数,这样比较稳妥,对于返回值,其实可以理解成从左往右,每次处理一个,cin和c原创 2022-04-10 12:58:34 · 236 阅读 · 1 评论 -
有关重构的样例
包含了有关“=”和‘【】’的重载问题;#include<iostream>using namespace std;class Cars{ private: int size; int* pir; public: Cars(int x=0); Cars(const Cars& a); ~Cars(); void push_back(int x); Cars& operator =(const Cars& a); int leng原创 2022-04-10 11:18:56 · 138 阅读 · 0 评论 -
KMP的看法
对于书中有关于kmp的资料,仅个人来理解,只是对于next进行了填充,而关于next是关于什么时候模板被拿来用的:例如:第二行为所求的模板,根据next的值来进行分析,对于next是关于首字母的前缀和在当前字母之前首字母的前缀和当出现和首字母不相等的字母时,这个字母后面一个代表的next就变成了0直到新的字母等于首字母。具体还是要自己感悟:代码如下:#include<iostream>using namespace std;void getnext(string a,i原创 2022-04-03 16:56:43 · 217 阅读 · 0 评论 -
二叉搜索树数组版构造
这个思路看上去比较新型一点,可以参考#include<iostream>#include<map>using namespace std;int f[105]={0},l[105],r[105],bns[105],d[105]={0};map<int,int> mp;void create(int& root,int n,int fa,int dp){ if(root=-1) { root=n; f[bns[n]]=fa; d[b原创 2022-03-21 22:36:56 · 232 阅读 · 0 评论 -
关于string的输出问题
在printf中,加入直接string a;printf("%s",a);回乱码,对于string这类,要用一下加.c_str()的方式,这个函数是返回字符串string的首地址,应为%s要的是char*,但是string只是字符串,要通过函数名来返回其首地址。string a;printf("%s",a.c_str());并且string还有一些将字符串转换成数字的函数#include<iostream>using namespace std;int main原创 2022-03-18 15:31:56 · 2275 阅读 · 1 评论 -
迷宫问题(非int型数组)
描述:定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。输入:一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。输出:左上角到右下角的最短路径,格式如样例所示。样例输原创 2022-03-12 23:51:43 · 449 阅读 · 0 评论 -
并查集(Union,find,father)
并查集是个数据结构,围绕着一个就是根节点展开,若两点的根节点相同那么就肯定在一棵树内,所以我们只需要维护一个点的父亲节点就好了,然后每次询问都查找根节点是否相同。但若树退化成链的话,我们就需要判断两点和根节点的关系,保留当前点的根节点关系就好了,这样的优化方式我们叫做路径压缩。1.普通并查集模板初始化:void mem(int n) { for (int i=0;i<=n;i++) { father[i]=i; R[i]=1;//秩优化原创 2022-03-11 22:35:10 · 559 阅读 · 0 评论 -
vector(向量)的简单操作
操作 功能size() 返回元素总数get() 获取秩为r的元素put(r,e) 用e替换秩为r的元素insert(r,e) e作为秩为r的元素插入,原后继元素后移remove(r) 删除秩为r的元素,返回其值disordered() 判断是否降序,返回逆序...原创 2022-03-07 22:26:03 · 224 阅读 · 0 评论 -
在数组中或关联容器中查找方法
有序区间算法中:1.binary_search:查找某个元素是否出现函数模板:binary_search(arr[],arr[]+size,indx)出现为1,不出现为0;2.lower_bound:查找第一个小于某个元素的位置函数模板:lower_bound(arr[],arr[]+size,indx)关于这个位置[begin,it),在it之前的那些都要比index小,但是返回的是比那些最小后面一个位置。3.upper_bound : 查找第一个大于某个元素的位置函数模板原创 2022-03-04 23:22:43 · 106 阅读 · 0 评论 -
迭代器(iterator和const_iterator)
定义容器类迭代器的方法:容器类名::iterator 变量名或者:容器类名::const_iterator 变量名访问迭代器指向的元素:*i批注:stack/queue/priority_queue均不支持迭代器#include<iostream>#include<vector>using namespace std;int main(){ vector<int> bns; bns.push_back(1); bns.push_ba原创 2022-03-04 19:06:20 · 156 阅读 · 0 评论 -
string类
原创 2022-03-01 14:40:05 · 65 阅读 · 0 评论 -
函数模板(二)
原创 2022-03-01 13:03:11 · 53 阅读 · 0 评论 -
文件的读写(一)
#include<iostream>#include<fstream>#include<vector>#include<algorithm>using namespace std;int main(){ vector<int> Q; ifstream srcFile("in.txt",ios::in); ofstream destFile("out.txt",ios::out); int x; while(srcF...原创 2022-02-28 23:22:17 · 52 阅读 · 0 评论 -
用流操纵算子控制输出格式
int main(){ cout<<n<<endl; cout<<hex<<n<<endl;//十六进制 cout<<dec<<n<<endl;//十进制 cout<<oct<<n<<endl;//八进制}原创 2022-02-28 21:39:32 · 131 阅读 · 0 评论 -
多态的表现形式
#include<iostream>using namespace std;class CBase{ public: virtual void fun() { cout<<"Base"<<endl; }};class CDerived:public CBase{ public: virtual void fun() { cout<<"Derived"<<endl; }};int main(){.原创 2022-02-27 21:16:08 · 83 阅读 · 0 评论 -
直接基类与间接基类
#include<iostream>using namespace std;class Base{ public: int n; Base(int i):n(i) { cout<<"Base"<<n<<"constructed"<<endl; } ~Base() { cout<<"Base"<<n<<"destructed"<<endl; }};c.原创 2022-02-27 17:21:55 · 400 阅读 · 0 评论 -
自增,自减运算符的重载
一:前置运算符作为一元运算符重载:1.重载为成员函数:T & operator++();T & operator--();2.重载为全局函数:T1 & operator++(T2);T1 & operator--(T2);二:后置运算符作为二元运算符重载,多写一个没用的参数:1.重载为成员函数:T & operator++(int);T & operator--(int);2.重载为全局函数:T1 &原创 2022-02-27 14:23:27 · 1382 阅读 · 1 评论 -
重载类型转换运算符
#include<iostream>using namespace std;class Complex{ private: double real,imag; public: Complex(double a=0.0,double b=0.0):real(a),imag(a){} operator double(){return real;}};int main(){ Complex c(1.2,3.4); cout<<double(c)<&l.原创 2022-02-27 13:52:24 · 72 阅读 · 0 评论 -
流输出运算符的重载
#include<iostream>#include<string.h>#include<cstdlib>using namespace std;class Complex{ private: double real,imag; public: Complex(double r=0.0,double i=0.0):real(r),imag(i){}; friend ostream& operator<<(ostream&am.原创 2022-02-27 13:41:39 · 106 阅读 · 0 评论 -
流插入运算符的重载
基础模板:ostream& ostream::operator<<(int n){ //...输出n的代码 return *this;}ostream& ostream::operator<<(const char* s){ //输出s的代码 return *this;}升级模板:代码不能运行,只能作为思路#include<iostream>using namespace std;class CStudent{原创 2022-02-27 13:25:47 · 152 阅读 · 0 评论 -
可变长整型数组(重载)
该题目在Embarcadero Dev-C++无法运行#include<bits/stdc++.h>using namespace std;class CArray{ private: int size; int *ptr; public: CArray(int s=0); CArray(CArray & a); ~CArray(); void push_back(int v); CArray & operator=(const CAr原创 2022-02-27 12:47:43 · 238 阅读 · 0 评论 -
友元函数(friend)
该代码出现了一处错误,进行标记#include<iostream>using namespace std;class Complex{ private: double real,imag; public: Complex(double a=0.0,double b=0.0):real(a),imag(b){}; Complex operator+(double a); friend Complex operator+(double a,const Complex&原创 2022-02-27 11:20:20 · 115 阅读 · 0 评论 -
深拷贝和浅拷贝
#include<iostream>using namespace std;class String { private: char* str; public: String():str(new char[1]){str[0]=0;} String(String& s) { str=new char[strlen(s.str)+1]; strcpy(str,s.str); } const char* c_str(){return str;}.原创 2022-02-27 10:47:31 · 65 阅读 · 0 评论 -
赋值运算符“+”“-”重载
#include<iostream>using namespace std;class Complex{ public: double real,imag; Complex(double a=0.0,double b=0.0):real(a),imag(b){} Complex operator-(const Complex& c);};Complex operator+(const Complex& a,const Complex& b){.原创 2022-02-27 10:29:12 · 66 阅读 · 0 评论 -
赋值运算符“=”重载
#include<iostream>#include<string.h>using namespace std;class String{ private: char* str; public: String():str(new char[1]){str[0]=0;} const char* c_str(){return str;}; String& operator=(const char* s); ~String(){delete []s.原创 2022-02-26 23:42:21 · 59 阅读 · 0 评论