
C++
文章平均质量分 72
buaadf
ARVR
3D
EE&CS
展开
-
【C++】学习笔记四十三——函数模板
函数模板函数模板是通用的函数描述,他们使用泛型来定义函数,其中的泛型可用具体的类型(如int或double)替换。通过将类型作为参数传递给模板,可使编译器生成该类型得函数。 由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时也被称为通用编程。 由于类型是用参数表示的,因此模板特性优势也被称为参数化类型(parameterized types)。函数模板允许以任意类型的方式来定义函数,例原创 2017-06-06 22:00:22 · 1119 阅读 · 0 评论 -
【C++】学习笔记五十二——友元
友元友元有三种:友元函数;友元类;友元成员函数。通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。创建友元创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend:friend Time operator*(double m, const Time & t);该原型意味着:虽然operator*()函数实在类声明中声明的,但它不是成员函数,因此不能原创 2017-06-14 17:45:15 · 332 阅读 · 0 评论 -
浮点数比较
有如下程序段:int i, n = 0;float x = 1, y1 = 2.1 / 1.9, y2 = 1.9 / 2.1;for ( i = 1; i < 22; i++ ) x = x * y1;while ( x != 1.0 ){ x = x * y2; n++;}printf( “ %d / n ”, n );A 21 B 22 C 无限循环 D 程序崩溃答案是C原创 2017-06-14 20:26:12 · 303 阅读 · 0 评论 -
构造函数的执行顺序
先执行静态成员的构造函数,如果静态成员只是在类定义中声明了,而没有实现,是不用构造的。必须初始化后才执行其构造函数。任何抽象基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)任何虚拟基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)任何非虚拟基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序) 任何成员对象的构造函数按照它们声明的顺序构造类自己的构造原创 2017-06-14 20:32:04 · 2336 阅读 · 0 评论 -
cout格式化输出
来源:《程序控》博客 – http://www.cnblogs.com/devymex/这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在、上使用这些格式化操作,从而代替sprin转载 2017-06-28 13:18:34 · 1370 阅读 · 0 评论 -
剑指offer题解C++【1】
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 时间限制:1秒 空间限制:32768K 解题思路从右上角开始找,如果目标数比当前位置小,则左移;如果目标数比当前位置大,则右移;如果相等,说明目标存在;超出范围则说明目标不存在;代码class Solution {pu原创 2017-07-25 23:37:13 · 602 阅读 · 0 评论 -
剑指offer题解C++【2】
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路首先计算字符串中的空格数量,若空格数量为count,则替换后的字符串长度增加2*count; 然后从最后一位开始替换字符,若为空格,则依次从后往前替换为’0’ ‘2’ ‘%’,否则不变; 由于已经知道了空格的数量,因此在替换完最原创 2017-07-26 14:06:18 · 370 阅读 · 0 评论 -
剑指offer题解C++【3】
题目描述输入一个链表,从尾到头打印链表每个节点的值。解题思路首先将链表中的值从头到尾压入一个栈中,然后再依次将值从栈中读取出来。 利用栈的先进后出原理即可。代码/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val原创 2017-07-26 14:12:37 · 289 阅读 · 0 评论 -
剑指offer题解C++【4】重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路前序遍历:中-左-右中序遍历:左-中-右后序遍历:左-右-中前序遍历序列的第一个值就是root;在中序遍历序列中找到root,root左侧为左原创 2017-07-26 14:55:26 · 256 阅读 · 0 评论 -
【C++】学习笔记五十一——运算符重载
运算符重载可对运算符进行重载,将运算符扩展到自定义类型。operator【运算符】(argument-list)例如:operator+()重载+运算符。【运算符】必须是有效的C++运算符,不能虚构一个新的符号。不能有operator@()这样的函数,但可以有operator[](),因为[]是数组索引运算符。实例:计算时间程序11.1 mytime0.h#ifndef MYTIME0_H_#d原创 2017-06-14 16:59:45 · 324 阅读 · 0 评论 -
【C++】学习笔记五十——类作用域
类作用域在类中定义的名称(数据成员名和成员函数名)的作用域都为整个类,作用于为整个类的名称只在该类中是已知的,在类外是不可知的。因此,可以在不同类中使用相同的类成员名而不会引起冲突。类作用域意味着不能从外部直接访问类的成员,公有成员函数也是如此。也就是说,要调用共有成员函数,必须通过对象。在类声明或成员函数定义中,可以使用未修饰的成员名称。构造函数名称在被调用时,才能被识别,因为它的名称与类名相同。原创 2017-06-09 23:08:30 · 1404 阅读 · 0 评论 -
【C++】学习笔记四十九——对象数组
对象数组声明对象数组的方法与声明标准类型数组相同:Stock mystuff[4];每个元素(mystuff[0]、mystuff[1]等)都是Stock对象,可以使用Stock方法:mystuff[0].update();mystuff[3].show();const Stock * tops = mystuff[2].topval(mystuff[1]);可以用构造函数来初始化数组元素。在这原创 2017-06-09 21:19:43 · 1075 阅读 · 0 评论 -
【C++】学习笔记四十——引用变量
引用变量引用是已定义的变量的别名。引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。这样除指针之外,引用也为函数处理大型结构提供了一种非常方便的途径。对于设计类来说,引用也是必不可少的。创建引用变量用&来声明引用:int rats;int & rodents = rats;其中,&不是地址运算符,而是类型标识符的一部分。int &指的是指向int的引用,原创 2017-06-01 22:53:04 · 1308 阅读 · 0 评论 -
【C++】学习笔记四十四——单独编译
单独编译将程序分为三部分:头文件:结构声明、函数原型等;源代码文件:自定义函数;源代码文件:main函数。一般头文件中包含的内容:函数原型使用#define或const定义的符号常量结构声明类声明模板声明内联函数头文件管理:避免多次调用头文件,使用#ifndef和#endif,如:#ifndef COORDIN_H_#define COORDIN_H_//...文件内容#原创 2017-06-07 23:11:46 · 1006 阅读 · 0 评论 -
C++ sort排序的妙用
题目描述 宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之 小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。” 现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入描述: 输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线原创 2017-06-28 23:06:53 · 969 阅读 · 0 评论 -
【C++】学习笔记四十五——存储持续性、作用域、链接性
存储持续性自动存储持续性:在函数定义中声明的变量,作用域为局部,没有链接性静态存储持续性:在函数外部定义的变量和使用static定义的变量线程存储持续性:使用thread_local声明的变量动态存储持续性:用new分配的内存静态持续变量有三种链接性:外部链接性(可在其他文件中访问):不在任何函数内声明内部链接性(只能在当前文件中访问):不在任何函数内,用static声明无链接性(只原创 2017-06-08 15:34:16 · 971 阅读 · 0 评论 -
C++中的幂次表示
C++中不能用^来计算幂次,^是位异或(XOR)在cmath(math.h)头文件中有pow()函数,用法如下:double pow(double x, double y);原创 2017-06-29 19:48:08 · 20006 阅读 · 0 评论 -
【C++】学习笔记四十六——类
类面向对象编程(OOP)抽象;封装和数据隐藏;多态;继承;代码的可重用性C++中的类一般来说,类由两部分组成:类声明:以数据成员的防暑描述数据部分,以成员函数(被称为方法)的方式描述公有接口;类方法定义:描述如何实现类成员函数。通常 ,将接口(类定义)放在头文件中,将实现(类方法的代码)放在源代码文件中。程序10.1 stock00.h#ifndef STOCK00_H_#de原创 2017-06-09 14:16:54 · 1217 阅读 · 0 评论 -
【C++】学习笔记四十七——类的构造函数和析构函数
构造函数类构造函数用来构造新对象,并将值赋给它们的数据成员。构造函数的名称与类名相同。程序在声明对象时,将自动调用构造函数。构造函数的原型和函数头有一个有趣的特征:没有返回值,但没有被声明为void类型。实际上,构造函数没有声明类型。1.声明和定义构造函数 以Stock为例,由于需要为Stock对象提供3个值,因此应为构造函数提供3个参数。一种可能的定义如下:Stock::Stock(const原创 2017-06-09 19:40:43 · 1048 阅读 · 0 评论 -
【C++】学习笔记四十八——this指针
this指针this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法)。每个成员函数(包括构造函数和析构函数)都有一个this指针。this指针指向电泳对象。如果方法需要引用整个调用对象,则可以用表达式*this。在函数的括号后面使用const限定符将this限定为const,这样将不能使用this来修改对象的值。然而,要返回的值并不是this(因为this是对象的指针),而是对象本原创 2017-06-09 20:48:42 · 902 阅读 · 0 评论 -
剑指offer题解C++【5】用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路队列C++队列queue模板类的定义在< queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。C++队列Queue类成员原创 2017-07-26 16:21:34 · 310 阅读 · 0 评论 -
剑指offer题解C++【6】旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路旋转数组可以分为两个有序的数组,最小元素就是这两个数组的分界点。可以用二分查找来解决:当数组大小为0时,返原创 2017-07-26 22:58:51 · 299 阅读 · 0 评论 -
剑指offer题解C++【17】树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路首先编写一个判定两棵树是否相同的函数isSame(TreeNode* p1, TreeNode*p2); 在HasSubTree函数中判断A的所有子树是否和B相同,若有相同的,则返回True。代码/*struct TreeNode { int val; struct Tree原创 2017-07-28 09:42:17 · 371 阅读 · 0 评论 -
剑指offer题解C++【18】二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10原创 2017-07-28 09:42:58 · 433 阅读 · 0 评论 -
剑指offer题解C++【19】顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路首先计算矩阵的行数和列数:行数=matrix.size(原创 2017-07-28 09:46:33 · 451 阅读 · 0 评论 -
剑指offer题解C++【20】包含min的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解题思路1定义两个栈,一个栈保存数据,另一个保存新数据入栈后的最小数 pop时,两个栈都要pop; 则minstack()的栈顶即为最小元素。代码class Solution {public: void push(int value) { mystack.push(value);原创 2017-07-28 09:47:41 · 283 阅读 · 0 评论 -
剑指offer题解C++【21】栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路创建一个栈进行压入、弹出操作。 当栈为空或者栈顶元素和popV当前元素不相等时,将pu原创 2017-07-28 10:58:49 · 1765 阅读 · 0 评论 -
剑指offer题解C++【22】从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路二叉树的层次遍历,借助一个队列实现。 创建一个队列,其中元素的类型为二叉树的节点; 按照“根-左-右”的顺序依次将二叉树的节点放入队列,每次从队顶取出对应节点的值,并删除队顶元素,直到队列为空。代码/*struct TreeNode { int val; struct TreeNode *left;原创 2017-07-28 11:40:11 · 430 阅读 · 0 评论 -
剑指offer题解C++【23】二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。后序遍历的顺序是左-原创 2017-07-28 22:19:01 · 643 阅读 · 0 评论 -
剑指offer题解C++【16】合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路首先创建一个空链表Head作为合并后的链表; 如果其中一个链表为空,则将另一个链表赋给Head; 如果两个链表均不为空,则比较当前的val,将val小的赋给Head,并将指针移动至下一个元素,直到某一个链表为空。代码/*struct ListNode { int val;原创 2017-07-27 18:32:05 · 331 阅读 · 0 评论 -
剑指offer题解C++【15】反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。解题思路新建两个空链表p和pnext;当前元素为pHead;先把下一个元素存下来,存为pnext;将下一个元素变为p;将当前元素pHead(已经反转)赋给p;将pnext(即原先未反转的下一个元素)赋给pHead;重复1~4,直到pHead为最后一个元素(指向nullptr)。代码/*struct ListNode { in原创 2017-07-27 17:29:14 · 250 阅读 · 0 评论 -
剑指offer题解C++【14】链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路设原始链表共n个节点; 将原始链表复制到两个新链表p1和p2; 先找到p2的第k个节点; 然后p1和p2同时指向下一个节点,直到p2为nullptr,此时p1指向第n-k个节点,即倒数第k个节点;代码/*struct ListNode { int val; struct ListNode *next; List原创 2017-07-27 16:50:28 · 372 阅读 · 0 评论 -
剑指offer题解C++【7】斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39解题思路斐波那契数列:1,1,2,3,5,8,13…… 第n项是第n-1项与n-2项之和,题目只要n<=39代码class Solution {public: int Fibonacci(int n) { if (n < 0) return -1;原创 2017-07-27 13:23:00 · 354 阅读 · 0 评论 -
剑指offer题解C++【24】二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路按照先序遍历将结点加入路径,如果当前结点是叶子结点则判断当前路径和是否为目标数,若满足条件,则把当前路径保存下来,并弹出结点;每一次递归返回父结点时,也回退一个结点。代码/*struct TreeNode { int val;原创 2017-08-04 16:12:13 · 1047 阅读 · 1 评论 -
剑指offer题解C++【9】变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路假设n级台阶有arr[n]种跳法; 第一次跳1阶,有arr[n-1]种; 第一次跳2阶,有arr[n-2]种; …… 第一次跳n-1阶,有arr[1]=1种; 第一次跳n阶,有arr[0]=1种; 综合以上,arr[n]=arr[0]+arr[1]+arr[2]+原创 2017-07-27 14:22:32 · 291 阅读 · 0 评论 -
剑指offer题解C++【10】矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路2*n的大矩形,设其横边为n,竖边为2,用n个2*1的矩形覆盖,共有arr[n]种方法; 若第一块矩形竖着放,则有arr[n-1]种; 若第一块矩形横着放,则第二块矩形也必须横着放,则有arr[n-2]种; 综上,arr[n]=arr[n-1]+arr原创 2017-07-27 14:31:08 · 483 阅读 · 0 评论 -
剑指offer题解C++【8】跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路对于n级台阶,假设有arr[n]种跳法; 1. 如果第一次跳1阶,那么总共有arr[n-1]种跳法; 2. 如果第一次跳2阶,那么总共有arr[n-2]种跳法; 3. 结合1,2,那么arr[n]=arr[n-1]+arr[n-2]代码class Solution {public:原创 2017-07-27 14:01:19 · 286 阅读 · 0 评论 -
剑指offer题解C++【11】二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路一个不为0的整数n,如果减1,那么(其二进制表示)原来处于最右边的1将会变为0,这个1后面的0(如果有的话)都会变为1,其余位数保持不变; 让n和n-1进行按位与,即n&(n-1),则会让n最右边的1变为0; 那么n的二进制中有多少个1,就可以进行多少次这样的操作。在计算机中,负数本身就是用补码表示的,因此不用考虑这原创 2017-07-27 14:46:38 · 332 阅读 · 0 评论 -
剑指offer题解C++【12】数值的整数次幂
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路库函数中有幂函数pow(x,y),如果你直接return pow(base,exponent);也能通过测试用例,但估计offer无缘了。为了降低时间复杂度,使用递归:如果n为偶数,a^n=a^(n/2)*a(n/2);如果n为奇数,a^n=a^(n/2)*a(n/2)*原创 2017-07-27 15:55:25 · 1126 阅读 · 0 评论 -
剑指offer题解C++【13】调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路复制原数组到一个新数组; 从前往后遍历,若为奇数,则依次替换原数组; 再次从前往后遍历,若为偶数,则继续替换原数组。代码class Solution {public: void reOrderArra原创 2017-07-27 16:32:06 · 446 阅读 · 0 评论