
c++
文章平均质量分 57
Reid__
这个作者很懒,什么都没留下…
展开
-
私有继承与包含
C++要实现has-a关系,除了包含,还可以使用私有继承。私有继承的基类所有public,protected方法都会变成派生类中的private方法,这意味着基类方法不会成为派生类公有接口一部分,即只能通过派生类的基类成员调用基类方法。私有继承的语法://用private修饰基类//private是默认修饰关键字,若继承时未注明public,则是private继承class Stu原创 2017-08-24 20:24:18 · 564 阅读 · 0 评论 -
leetcode : twosum/BST
题:判断二叉树中是否有满足x+y=target的整数对(x,y)代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x)原创 2017-08-29 19:25:11 · 287 阅读 · 0 评论 -
leetcode : subtree of another tree
题:给出两棵二叉树,判断一颗是不是另一颗的子树代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NU原创 2017-08-29 23:14:06 · 300 阅读 · 0 评论 -
leetcode : addTwoNum
题:You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return转载 2017-08-31 23:52:35 · 1080 阅读 · 0 评论 -
C++ 多线程 CreateThread函数
//先摘录一段网上关于这个函数的介绍当使用CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤: 1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回 2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1 3分配context结构 4分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为P转载 2017-09-10 22:07:25 · 1070 阅读 · 0 评论 -
C++ 多线程 WaitForMultipleObejects函数
WaitForMultipleObjects函数的定义如下,摘自微软的文档:DWORD WINAPI WaitForMultipleObjects( _In_ DWORD nCount, _In_ const HANDLE *lpHandles, _In_ BOOL bWaitAll, _In_ DWORD dwMillise原创 2017-09-10 22:48:14 · 1717 阅读 · 0 评论 -
C++ 多线程 GetStdHandle函数
GetStdHandle返回一个指向标准输入,输出或错误处理的句柄(或是经过SetStdHanlde修改的指向特殊设备的句柄)。Microsoft文档里的函数定义如下:HANDLE WINAPI GetStdHandle( _In_ DWORD nStdHandle);其接受的参数有三种:STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR转载 2017-09-11 13:03:10 · 3545 阅读 · 0 评论 -
const修饰符
const的优势:① 被const修饰的变量是只读的,可以防止意外的修改。② const相当于定义符号常量,可以和宏定义一样做到只修改程序开头的定义,来改变所有对应的值。③ 宏定义做的是值替换,而const修饰的变量从汇编的角度来看只是给出对应的地址。④ const的效率更高,编译器并不会给const变量分配内存,而是将其作为一个符号常量。const被用于指针:①原创 2017-09-11 15:48:48 · 301 阅读 · 0 评论 -
C++ 多线程 CloseHandle函数
CloseHandle函数读入一个句柄参数,释放其内存。Microsoft的文档里给它的函数定义是:BOOL WINAPI CloseHandle( _In_ HANDLE hObject);它返回bool类型,若成功释放句柄,就返回true,否则返回false。句柄也是系统资源,每次用完都要还给系统。需要注意的是线程并不是句柄,句柄相当于一个线程的指针,线程转载 2017-09-11 16:43:31 · 1093 阅读 · 0 评论 -
binary search中遇到的一个overflow问题
做leetcode的一道很普通的二分查找的问题的时候,使用的是用惯的mid=(front+low)/2写法,结果这次遇到了overflow问题,改成mid=front+(back-front)/2就没有问题了。写在这提醒一下自己要注意溢出问题。先抄下题目原文:然后我写的二分查找是:// Forward declaration of isBadVersion API.b原创 2017-09-11 18:13:08 · 457 阅读 · 0 评论 -
记一个for(auto it:container)的问题
当使用for(auto it:container)遍历一个容器想要删除其中一个元素的时候,假设要删除的是第j个迭代器指向的元素,删除这个元素之后,容器后面的从原本的第j+1个元素开始向前移动一格,填满空缺,所以此时第j个迭代器已经指向了原本的第j+1个元素,然后一轮循环结束,迭代器++,指向了原本的第j+2个元素。这样就跳过了一个元素未被遍历到。原创 2017-09-11 16:23:19 · 3221 阅读 · 0 评论 -
leetcode : mergeTrees(递归)
题:输入两颗二叉树,将它们合成为一颗二叉树,合成规则如下,The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tr原创 2017-08-29 21:03:54 · 606 阅读 · 0 评论 -
leetcode : threesum
题目:从一个一维整型数组nums中找出所有能使x+y+z=0的解[x,y,z],并用一个二维数组输出。思路:给输入数组排序,然后遍历数组,把每次取出的元素作为可能解的最小元素x,在这个元素之后的序列中找能够使上式成立的所有(y,z)然后组合输出(x,y,z)。代码:#include using namespace std;vector> threeSum原创 2017-08-28 22:38:34 · 414 阅读 · 0 评论 -
抽象基类,虚函数,纯虚函数
在敲代码的时候很容易遇到一些比较尴尬的情况。假设现在的需求是创建两个类,一个椭圆类,一个圆类。第一种方法是由于圆是椭圆的特殊情况,可以从椭圆类派生圆类,如下:原创 2017-08-24 04:29:32 · 367 阅读 · 0 评论 -
包含表示has-a模式,<valarray>类
假如我们现在需要一个Student类,里面储存了学生的name和scores,一般提到name会想到用char数组,提到scores会想到用double型数组,但使用数组就会带来的一个长度不确定的问题,要是声明一个很大的数组,太浪费内存空间,要是在长度不够用的时候再改变长度,则又太繁琐。这时候可以用C++自带的模板类,用string型变量储存name,用valarray储存scores。对原创 2017-08-24 16:01:35 · 453 阅读 · 0 评论 -
模板类,通用类型名与非类型参数
C++中有一系列用来存储和修改变量的类,用来实现栈和队列等数据结构,但若是每次遇到一种变量类型就要重写一个存储该类型的stack类未免太麻烦,为了解决这个问题,就需要使用模板类。例:用模板类实现的一个简单stack类template class Stack{private: Type items[10]; int top;public: St原创 2017-08-26 13:15:29 · 804 阅读 · 0 评论 -
成员模板,模板类做类成员
C++的模板可用作结构体、类或模板类成员,在此记录一个例子:#include using std::cout;using std::endl;templateclass beta{private: template //将模板类定义放在类的私有变量区域,模板类做为私有变量 class hold{ private: V val; public: hold(V v原创 2017-08-26 22:14:18 · 1759 阅读 · 0 评论 -
异常处理,abort(),exit(),返回错误码
abort函数位于cstdlib头文件里,它会终止程序,并根据具体实现返回一个值给调用这个程序的系统或进程,而exit函数单纯终止程序,不会返回消息。abort的具体实现:#include #include using namespace std;double hmean(double a,double b){ if(a==-b){ cout<<"aerror!a+b=0"转载 2017-08-27 20:51:25 · 4938 阅读 · 0 评论 -
<map>\<unordered_map>
C++的map提供一种指定类型间的一对一映射关系,其基本的创建、查找、删除操作如下:#include #include #include using namespace std;map int_string; //声明一个从整型到字符串型的映射,即int为key,string为valueint_string[404]='Not Found'; //这是最简单的建立映射的语法转载 2017-08-27 21:35:39 · 343 阅读 · 0 评论 -
leetcode : twosum(使用哈希表)
给定一个int型一维数组,和一个目标值target,用一个int型一维数组返回数组中每一对相加等于target的的键值的index。具体函数如下:#include #include #include using namespace std;vector twosum(vector& nums,int &target){ unordered_map m; //用哈希表原创 2017-08-28 01:09:32 · 358 阅读 · 0 评论 -
类的构造函数和析构函数
python由于变量类型的自由,在定义函数的时候省去了许多麻烦。C++想要在类里定义一个构造函数,和写普通的成员函数有所区别:①构造函数没有声明返回类型②构造函数可以有多个,分别应对不同参数③通常取和类名相同的函数名析构函数:作用:在类成员使用完毕后,释放其所占用资源语法:①和构造函数一样不声明返回类型②在函数名前加~以表明身份,如~Box(){原创 2017-08-23 23:20:42 · 480 阅读 · 0 评论 -
类的操作符重载及友元函数
若想要定义的类成员能够符合人类逻辑使用已有的语言内置操作符,可以大幅提高编程效率和代码可读性其一般语法为:class test{public: ...... typename operator name(){ ...... } .......}; 举一实例:class Box{priv原创 2017-08-23 23:40:48 · 453 阅读 · 0 评论 -
<fstream>文件输入输出基础操作
由于刚学C++,在此记录一些勉强够用的文件流输入输出操作先放一段代码:#include #include #include using namespace std;string promt_file_string(ifstream &infile,string promt="input:"){ while(true){ cout<<promt; strin原创 2017-08-24 00:24:54 · 2225 阅读 · 0 评论 -
类继承,公有继承,多态公有继承
从一个类派生出另一个类时,原始类成为基类,继承类成为派生类。其语法为:class Subclass:public Parent_class{ //注意基类前的public修饰 ......};派生类不能直接访问基类的私有成员,必须通过公有方法(或者说基类方法)来访问,所以在写类的时候,最好写好访问私有对象的公有方法。具体地说,派生类的构造函数必须使用基类的原创 2017-08-24 01:16:05 · 620 阅读 · 0 评论 -
static修饰符
static的主要功能是隐藏变量,被static修饰的变量和全局变量一起被存储在静态存储区(静态存储区的变量默认初始化为0),区别是static修饰的变量可以限定作用域。static修饰的变量在其所在的scope中是唯一的,它只会在线程第一次接触它的时候初始化一次,在第一次初始化以后尝试再次初始化它是无效的,例:static int num=10;int num=1;// 这条原创 2017-09-12 17:46:45 · 234 阅读 · 0 评论