
C/C++
无鞋童鞋
有远大抱负的人不可忽略眼前的工作
展开
-
C++程序抛出异常后执行顺序
1 析构函数中是否可以抛出异常 首先我们看一个常见的问题,析构函数中是否可以抛出异常。答案是C++标准指明析构函数不能、也不应该抛出异常! C++异常处理模型是为C++语言量身设计的,更进一步的说,它实际上也是为C++语言中面向对象而服务的。C++异常处理模型最大的特点和优势就是对C++中的面向对象提供了最强大的无缝支持。那么如果对象在运行期间出现了异常,C++异常处理模型有责任清除那些原创 2017-09-19 16:30:30 · 8442 阅读 · 1 评论 -
C/C++标准库中定义的各个类型最大值最小值limit.h
编程中,我们一般需要考虑各个数据类型能够存储的最大值。虽然我们知道例如char是1个字节,short int是2个字节,能够推倒出对应的最大值,但是这种累活实际上标准库早就通过预定义方式事先定义了,我们直接调用如INT_MAX常量符就行。这些预定义是记录在limit.h头文件中,下面罗列一些常用预定义://单字节 char和unsigned char类型#define SCHAR_MIN (-原创 2017-05-08 18:51:52 · 8197 阅读 · 0 评论 -
统计文本中每个单词出现的频率(附C++完整程序)
文本读入和统计英文单词出现的频率是面试中经常会被提及的一个问题。题目看着很简单,但是考到了很多的知识点,需要你对C++语言很全面的掌握。 首先我们看到题目可以想到将其分为两个模块:文本单词的读入和统计英文单词出现频率。那怎样将文本完整的读入缓存字符串数组或者string类对象中自然是首要任务;其次如何处理符号位的影响;最后如何统计单词出现频率。原创 2017-05-23 16:51:07 · 17512 阅读 · 3 评论 -
C++实现数字转为字符串string类对象
数字转为字符串string类对象主要有三种方法,前两种主要借助字符串数组char*来中转,而最后一种是string类中方法更简单,但需要C++11的支持。 1. sprintf/sprintf_s 字符串格式化命令先将数字转为字符串数组,然后再赋值给string类对象。C++11版本编译器可能提醒使用sprintf_s,主要因为旧版本sprintf不安全。该命令定义在stdio.h头文件中。#i原创 2017-03-11 10:12:51 · 8196 阅读 · 0 评论 -
C/C++函数模板template
当函数处理功能类似,函数名相同,但是参数个数或者类型不同,我们知道函数重载(overload)。但是如果仅函数参数的类型不同,我们想到靠函数模板解决这个问题,不仅节省内存,而且不用复杂声明多个函数。 函数模板构建一个可以“兼容”所有类型,对于不同类型实现统一的处理。原创 2016-09-29 18:33:42 · 957 阅读 · 0 评论 -
C/C++库函数strstr和find实现子字符串查找
C/C++库函数strstr和string中find方法实现子字符串查找原创 2017-04-25 12:54:42 · 43047 阅读 · 0 评论 -
C语言支不支持重载?
首先这个问题的答案是C++支持函数重载而C语言不支持函数重载。下面我们从程序编译链接阶段看看其中的原因。 先看看重载的定义,函数重载就是指: 在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同或类型不同),返回值可同可不同。 那么问题来了,为什么C++支持函数重载,而C语言不支持呢? 从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,原创 2017-04-17 09:50:03 · 6072 阅读 · 1 评论 -
重写(覆盖)和重载的区别
牛客网题: 下列对函数double add(int a , int b)进行重载,正确的是() A. int add(int a ,int b ,int c) B. int add(double a , double b) C. double add(double a , double b) D. int add(int a , int b) 答案是: ABC原创 2017-03-24 20:18:09 · 2972 阅读 · 0 评论 -
C/C++如何以秒计时程序运行时间
C/C++中计时调用的方法函数是clock()函数,它定义在ctime或者time.h头文件中。形式如下:_CRTIMP clock_t __cdecl __MINGW_NOTHROW clock (void); 一般情况下可以把它直接视为clock_t clock(void);其中函数的返回值是clock_t。clock_t实质是头文件中long数据类型类型定义的一个代称。使用计时很简单,只要在原创 2017-03-23 16:52:57 · 8383 阅读 · 0 评论 -
关于C/C++动态申请空间释放和内存泄漏问题介绍
1. 动态申请空间1.1 基本内容 Ⅰ 动态申请的空间没有具体名称,只能通过指针间接访问(无论new还是malloc方式)。 Ⅱ 动态申请空间都是存放在堆中,有别于系统自动分配的空间是存放在堆栈中(即栈)。 Ⅲ 栈中系统分配的空间,在使用结束会自动释放。而程序员动态申请的空间则需要人为来释放,否则随着程序运行,内存占用积累,很容易造成内存泄漏,尤其在程序过大,运行时间过长的时候,更需要原创 2016-09-24 13:45:20 · 11496 阅读 · 0 评论 -
冒泡排序优化之鸡尾酒排序法
鸡尾酒排序法,又名双向冒泡排序法,算法传统冒泡法的一点改进。但是对于鸡尾酒排序,算法的时间复杂度与空间复杂度并没有改进。 不同的是排序的交换次数。某些情况下鸡尾酒排序比普通冒泡排序的交换次数少。比如{2,3,4,1},鸡尾酒排序只需交换2次,而冒泡排序需要三次。总体上,鸡尾酒排序可以获得比冒泡排序稍好的性能。但是完全逆序时,鸡尾酒排序与冒泡排序的效率都非常差。 鸡尾酒排序的思想就是在从前原创 2017-03-11 12:11:36 · 2080 阅读 · 1 评论 -
数据搜索之二分查询
数据搜索中,如果给定数据集是乱序的情况下一般我们使用顺序搜索按位查询是最常用的方法。但是一旦数据是顺序的,二分法则能大大减少数据搜索的工作量。尤其在几十万甚至上亿的数据量情况下,它的效率就能大大的体现。 二分法的思想是通过每次把数据集所在小区间收缩一半的方法,使区间的两个端点逐步迫近待查询的数,以求得该数所在的索引。这种方法叫做二分法。 程序如下:#include<iostream>u原创 2017-03-11 12:53:08 · 626 阅读 · 0 评论 -
C/C++直接输出一个数据的十六进制、八进制和二进制
直接cout输出将十进制数转换为十六进制、八进制和二进制程序如下: #include<iostream> #include<bitset> //使用标准库中bitset类输出二进制 using namespace std; int a = 100; cout<<"十进制 "<<a<<endl; cout<<"十六进制 "<<hex<<a<<endl;原创 2017-05-24 13:34:34 · 3388 阅读 · 0 评论 -
C/C++指向二维数组的指针
1. 二维数组 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为: int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}} 设数组a的首地址为1000,各下标变量的首地址及其值如图所示。 C语言允原创 2017-04-07 18:31:00 · 16204 阅读 · 6 评论 -
注意浅拷贝的动态内存的释放
深拷贝与浅拷贝在C++类开发中是一类棘手的问题,稍不留神就会出现诸如内存泄漏,野指针等问题。尤其是在类中成员变量存在动态分配内存的时候(指针,引用)。浅拷贝就是对象的数据成员之间的简单赋值,如类的默认拷贝构造函数,即用该类的一个对象去给令一个对象赋值时所执行的默认过程就是浅拷贝。 首先我们来看一个简单的情况,也就是类中成员属性仅有普通类型数据,而不包含指针和引用。代码如下:class A{原创 2017-07-06 00:03:01 · 1787 阅读 · 0 评论 -
C++父类指针指向子类对象的实现原理
1 前言 记得当初阿里面试的时候被问道这个问题,平时自己面对这个方法都习以为常的使用,C++多态和动态绑定不就是这么实现的嘛,但是还真没有刻意去关注其中的原理。今天特意看了相关资料,现在分享给大家。 其实这块我们需要分为两种情况来考虑,第一种是类继承(静态绑定),第二种是父类中包含虚函数(动态绑定)。 2 具体实现 2.1 没有虚函数的继承 如果以一个基础类指针指向一原创 2017-08-30 23:04:48 · 11731 阅读 · 8 评论 -
C++检测异常assert()函数
1 assert()函数使用 assert()一般用于debug下异常检测的功能函数,例如文件打开是否成功,函数形参传入是否理想,变量定义是否正确等。总的来说其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression ); assert的作用就是计算表达式 expression ,如果其值为假(即为0)原创 2017-07-30 23:11:26 · 5332 阅读 · 0 评论 -
C/C++中volatile关键字详解
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 “The C++ Programming Language” 对 volatile 修饰词的说明: A volatile specifier is a hint to a compiler that an ob转载 2017-08-13 23:55:11 · 811 阅读 · 0 评论 -
网易2017校园招聘编程题——分苹果
网易2017校园招聘编程题:现商城买苹果,有8个一袋,6个一袋。小易想去买n个苹果(不能多也不能少),输出购买袋数最少的袋子个数,如果不能满足买n个苹果,则输出-1。原创 2016-09-28 21:45:30 · 1107 阅读 · 2 评论 -
C/C++枚举enum分别打印输出枚举子和枚举值的方法
关于枚举枚举的基础概念我这里不再介绍,感兴趣的同学可以查阅另一篇博文C/C++中枚举类型enum使用。这里我主要提一下在调试一个大型程序中遇到日志打印中一个关于枚举输出的小错误。 我们知道枚举分为枚举子和枚举值,就相当于键与值的对应关系。例如下面的枚举变量:enum Example {FIRST,SECOND,THIRD}; // 三个枚举子对应枚举值默认是0,1,2。 那如何输出枚举值和枚原创 2017-08-02 23:55:57 · 55906 阅读 · 0 评论 -
C++遍历日志log目录,并提取数据进行分析
1 前言 我们经常在编写软件的时候,需要加载log文件来记录程序运行过程中可能会出现的bug,或者记录一些重要的运行信息。一旦一个目录下生成很多log文件后,实际上我们管理与分析还是需要费一些时间的。这其中就需要我们懂得怎样读取log文件,怎样遍历目录,怎样解析数据等等一系列操作。 下面我们直接通过一个实例来了解各个部分是如何实现的,这个实例的要求如下: ①、D盘log目录下有很多原创 2017-07-31 23:26:23 · 8405 阅读 · 1 评论 -
C++中数组、链表和vector等容器之间的区别
1. 各个容器之间区别① vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间岁间的插入,删除元素要慢,而且如果一开始分配的空间不够的话,有一个重新分配更大空间,然后拷贝的性能开销。② deque (小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快原创 2016-10-12 09:05:04 · 16700 阅读 · 1 评论 -
数组中&a与&a[0]的区别
在探讨这个问题之前,我们首先来看一道笔试题,如下: 【摘自牛客网】下列代码的结果是:(正确答案是 C)main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } A、3,5 B、2,4 C、2,5 D、3,4 下面我们来分原创 2017-07-09 10:34:57 · 17595 阅读 · 5 评论 -
windows/vs如何获取程序内存使用量和时间花费
1 获取内存使用量 获取内存使用量主要使用Psapi.h中声明的GetProcessMemoryInfo函数: ①、在程序中添加#pragma comment(lib,”Psapi.lib”),将Psapi.lib包含进去,或者通过在工程的属性中添加Psapi.lib; ②、在程序中#include<Psapi.h>; ③、在需要查看内存的代码处添加如下代码:原创 2017-06-28 22:57:37 · 5079 阅读 · 0 评论 -
类中有引用需要注意——非静态的引用成员错误提示,不能使用默认的赋值运算符
我们知道,当我们我们没有定义赋值操作符时,编译器会生成一个默认的赋值操作符执行浅拷贝,就像默认构造函数一样是编译器默认生成的。而如果勒种有引用就需要注意一个大大的误区。我们知道引用在定义的时候就需要初始化,指定这个引用变量是哪个变量的别名,否则就会报错。当一个类中使用了引用但没有定义赋值操作符,会导致什么问题呢?#include<iostream> using namespace std;原创 2017-07-17 23:26:50 · 2388 阅读 · 0 评论 -
C++中的mutable和volatile
1 mutable 在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。struct ST { int a; mutable int b; }; const ST st={1,2}; s转载 2017-07-06 23:04:18 · 2550 阅读 · 0 评论 -
C/C++自带十进制转其它进制函数接口itoa/_itoa_s
C/C++里提供强大的itoa()函数, 能将一整型数值转换为任意2~36进制的字符串保存。函数存在于stdlib.h头文件中,格式如下: itoa(int,char*string,int);//参数:需转换值,保存结果字符数组,进制 需要注意C++11版本之后,例如VS2013版本以后对该函数进行了修改,并定义了更加安全稳定的接口_itoa_s(),使用方式和上面一样。 参考例原创 2017-03-11 19:36:21 · 5984 阅读 · 0 评论 -
C/C++关于字符串string、char*字符串数组与其他类型转换
C/C++关于字符串string、char*字符串数组与其他类型转换原创 2016-10-01 13:21:03 · 4376 阅读 · 0 评论 -
输入一串未知个数的数据直到EOF(-1)停止和键盘输入文件结尾符EOF
1. 输入到EOF(-1)停止 如果一般自己调试程序,在输入数据未知数据数量的时候,希望随时可以停止数据输入。一般情况下,两种写法,一种遇换行符’\n’停止,但是由于’\n’符在输入阶段表示开始获取值的开始信号,如果不适用getchar()获取,一般scanf默认是不会认为换行是输入的数据,所以写法稍微复杂。该写法不做今天重点内容,如果想要学习该机制程序写法,详细请看下面的博文: http:原创 2016-11-18 11:49:42 · 7402 阅读 · 0 评论 -
去哪儿2017校园招聘笔试题——获得文件扩展名filename extension
输入数据为一个文件路径 ,输出对于每个测试实例,要求输出对应的filename extension原创 2016-10-13 12:33:51 · 812 阅读 · 1 评论 -
C/C++中枚举类型enum使用
本文介绍了C/C++关于枚举enum使用,语法,注意点等进行了总结原创 2016-09-27 12:54:24 · 26761 阅读 · 7 评论 -
C/C++中字符串数组及strlen()和sizeof()区别
本文介绍了字符串数组的使用和定义,以及初始化和赋值的不同之处。此外,介绍了strlen()和sizeof()在字符串使用上的区别原创 2016-09-27 08:21:22 · 2767 阅读 · 0 评论 -
C++实现改进的冒泡排序
冒泡排序法(Bubble Sort),即起泡排序并不能改观普通排序的时间复杂度,还是O(n^2)。冒泡排序法是从后往前两两比较,然后遍历整个数组,犹如鱼吐水泡,故起此名。而普通排序法是遍历整个数组,然后每个元素和后面的所有元素进行比较,升序则是后面小的和该元素互换位置,但这样可能将很小的元素移到后面。 改进的冒泡排序是通过设立一个标志位Flag,当检测到升降序排序时完成时候,置位标志位Flag原创 2016-10-12 19:21:29 · 2626 阅读 · 0 评论 -
C/C++三种常见变量赋初值和三种强制转换方式
较少了C/C++三种变量定义和赋初值方式,以及三种常见强制转换方式原创 2016-09-26 18:35:10 · 5623 阅读 · 0 评论 -
C/C++声明类型typedef
typedef为现有类型定义易于记忆的类型名,即同义字,别名。它与传统C语言中#define很相似,下面我们就从实例中体会它的用处。原创 2016-10-12 13:29:37 · 1500 阅读 · 0 评论 -
C/C++中宏定义和常变量的区别
主要介绍宏定义和常变量的区别,以及顺便介绍了常引用,还有char *const p、char const *p和 const char *p的区别。原创 2016-09-20 11:39:38 · 5659 阅读 · 0 评论 -
C++内联函数inline
介绍了内联函数的作用以及使用,并且比较了它与宏定义的区别。原创 2016-09-22 13:03:46 · 908 阅读 · 0 评论 -
网易有道2017校园招聘编程题——洗牌
网易有道2017校园招聘编程题—洗牌。洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿 着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌。原创 2016-10-11 12:52:56 · 939 阅读 · 2 评论 -
网易2017校园招聘编程题——暗黑字符串
网易2017校园招聘编程题暗黑字符串原创 2016-10-10 20:38:15 · 1213 阅读 · 0 评论 -
C/C++变量默认初始化
分析了什么情况下,C/C++不给变量赋初值会报错,什么情况下系统会赋什么默认值。原创 2016-09-26 19:41:51 · 8039 阅读 · 0 评论