
c和c++语言
文章平均质量分 51
c、c++
小葱1024
耐得住寂寞才能守得住繁华,在该奋斗的年纪不要选择了安逸,
坚持梦想,无畏风雨
展开
-
了解c++中的类型转换
1、static_cast(隐式类型转换)—–>相关类型的转换static_cast用于非多态类型的转换(静态转换),任何标准转换都可以用它,但 它不能用于两个不相关的类型进行转换。 2、reinterpret_cast(强制类型转换)reinterpret_cast操作符用于将一种类型转换为另一种不同的类型。 3.const_cast(去const属性的类型转换)const_cas原创 2017-04-21 15:52:07 · 376 阅读 · 0 评论 -
浅谈shared_ptr及shared_ptr涉及到的循环引用问题
起初在C++标准库里面是没有智能指针的,直到C++11才加入了shared_ptr和unique_ptr以及weak_ptr。最早的智能指针在Boost库里面,Boost库是为C++标准库提供扩展的一些C++程序的总称,由Boost社区组织开发维护。 shared_ptr与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以原创 2017-04-05 00:30:23 · 14295 阅读 · 7 评论 -
浅谈auto_ptr智能指针
在c++标准库里主要有三个智能指针:①auto_ptr在任何情况下都不要使用②scoped_ptr独占空间,防拷贝和赋值,是对第①个智能指针的缺陷所作出的解决③shared_ptr利用引用计数,和其他对象共享一块空间(与weak_ptr结合使用)这篇文章主要的内容是讲解auto_ptr所引出的一系列问题:一、AutoPtr智能指针原创 2017-04-02 00:20:26 · 13543 阅读 · 3 评论 -
虚函数和纯虚函数的区别
转自:http://blog.youkuaiyun.com/hackbuteer1/article/details/7558868首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现转载 2017-03-29 19:36:14 · 308 阅读 · 0 评论 -
模板实现冒泡(不同类型的元素)排序
真是学着忘着,学着忘着… 学的东西已经快要忘光了,说到底,还是自己没有深刻的理解并掌握。 提醒自己:再简单的知识你不会就是不会,永远不要对学过的小知识或者简单的知识不屑一顾,可能下次你跳进的坑就是这些小的知识点为你而挖的。#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;te原创 2017-03-23 00:55:00 · 419 阅读 · 0 评论 -
单链表的基本操作
无论做的事情有多简单亦或是有多难,都应该保持一颗平常心,如果问题很简单,那么就需要去思考可不可以更简单,例如:编程,人们都喜欢那些写的很简洁且易看懂的代码,下面我做的就是这样的事情。当然,由于个人能力问题,可能会有些许问题,还请各位亲们批评指教。声明:下面代码的测试平台:vs2013//SList.h#pragma once#define _CRT_SECURE_NO_WARNINGS 1#in原创 2017-03-22 12:43:56 · 257 阅读 · 0 评论 -
全面了解setjmp与longjmp
转自:http://blog.itpub.net/7235683/viewspace-851455/实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形 式。后来为了更好地、更方便地支持异常处理编程机制,使得程序员在C语言开发的程序中,能写出更高效、更友善的带有异常处理机制的代码模块来。于是,C语 言中出现了一种更优雅的异常处理机制,那就是setjmp()函转载 2017-03-21 14:06:23 · 842 阅读 · 0 评论 -
日期类
1.关于日期d1-d2所得差值的思路总结:方法一:重载一个自增运算符,然后使用计数器来计算两个日期之间的差值。 因为比较简单,就直接看代码!int Date::operator-(const Date& d1)//两个天数相减(形如:d1-d2){ int flag = 1; if (d1 > *this) { flag = -flag; }原创 2017-03-12 20:43:27 · 326 阅读 · 0 评论 -
为什么C++编译器不能支持对模板的分离式编译
转自:http://blog.youkuaiyun.com/pongba/article/details/19130首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,转载 2017-03-11 19:17:32 · 236 阅读 · 0 评论 -
初识模板
泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段。 模板是泛型编程的基础。 模板:函数模板和类模板。模板是一个蓝图,它本身不是类或者函数,编译器用模板产生指定的类或者函数的特定类型版本,产生模板特定类型的过程称为模板实例化。 一、函数模板函数模板参数:模板类型参数和非模板类型参数。 模板类型参数:1.在模板的定义中,模板参数不能为空;2.模板类型形参可作为类型说明符用在模原创 2017-03-12 01:02:21 · 366 阅读 · 0 评论 -
深浅拷贝以及引用计数
标准库类型string表示可变长的字符序列,使用string类型必须首先包含它的头文件。 作为标准库的一部分,string定义在命名空间std中。#include<string>//注意这里没有.husing namespace std;下面让我们一起来模拟string类中的几个比较重要的成员函数,一步一步的剖析它们的实现机制: 1.构造函数:示例①class String{publ原创 2017-03-07 01:02:37 · 401 阅读 · 0 评论 -
动态内存管理(new/delete)
拖了这么久,终于有时间把这块的东西总结一下,已经大三下学期了,留给我的时间已经不多了,希望可以抓住大学时光的尾巴,不负父母的殷切期望!首先让我们来看看内存的分配方式都有哪些?内存的分配方式:①从静态存储区域分配。内存在程序编译的时候就已经分配好了,这些内存在程序整个运行期间都存在,如:全局变量、static变量。②在堆栈上分配。在函数执行期间,函数内部变原创 2017-03-04 09:12:10 · 482 阅读 · 2 评论 -
C++ 虚函数表解析
陈皓 http://blog.youkuaiyun.com/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决转载 2017-03-14 16:20:10 · 282 阅读 · 0 评论 -
多态+菱形虚拟继承(下)
对象的类型:在这里先来看一下在继承体系中搞的人晕头转向的几个术语:下面让我们一起进入多态的世界 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。我们把具有继承关系的多个类型称为多态类型。 引用或指针的静态类型与动态类型不同这一事实正是c++语言支持多态性的根本所在。 1、多态分为静态多态和动态多态。静态多态和动态多态还有下面的原创 2017-03-02 00:13:51 · 1002 阅读 · 3 评论 -
继承*菱形继承与菱形虚拟继承(上)
面向对象程序设计的核心思想是封装(数据抽象)、继承和多态(动态绑定)。 通过使用数据抽象,我们可以将类的接口与实现分离; 使用继承,可以定义相似的类型并对其相似关系建模; 使用动态绑定,可以在一定程度上忽略相似类型的区别,而用统一方式使用它们的对象。简单的说,继承的使用就是为了代码复用。 1.继承 ①继承机制:是为了扩展原有类,增加新的功能。 ②继承的定义格式: 子类名:原创 2017-02-27 22:26:41 · 2630 阅读 · 0 评论 -
类的构造函数
首先让我们来了解一下类的默认成员函数都有哪些?下面来详细了解构造函数的特性和使用方法。 一.构造函数:是一个特殊的成员函数,由编译器自动调用。①构造函数的作用: a.创建对象; b.初始化对象; c.类型转换;②构造函数的特性: a.函数名与类名相同;b.无返回值;c.可以重载;(ps:无参的构造函数和全缺省值的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个)。d.构造函数原创 2017-02-27 22:06:04 · 1047 阅读 · 0 评论 -
类中非静态成员函数中的----this指针
首先思考一下在c++中,编译器是如何识别一个类的? 识别一个类可以分为一下三步? ①识别类名; ②识别数据成员; ③识别成员函数并将其改写。引出的问题:类中的数据成员相当于全局变量,但是全局变量在使用之前,必须先定义,而类中的数据成员的位置可以任意,这就是因为识别类时的顺序而导致的区别。我们都知道类中成员函数和数据成员的存储方式: 类的大小包括非静态数据成员而不包括成员函数原创 2017-02-15 23:32:44 · 4440 阅读 · 0 评论 -
关于引用的那些事
刚开始接触c++,首先一定会了解引用,引用是c++扩展的一个变量类型,通俗点讲,就是变量的别名,与变量共享一块空间。有人可能会想,这很简单呀,不就是变量的别名吗?其实,引用最多的使用并不是作为变量的别名,而是作为函数的形参,可以实现通过函数调用来改变实参变量的值,怎么听起来这么熟悉呢,对了,你可能想起来通过指针也可以改变实参变量的值,那让我们来看看引用和指针有哪些联系和区别呢?1.引用(refer原创 2017-01-20 15:22:16 · 542 阅读 · 0 评论 -
c/c++函数名字修饰规则初探
开始接触c++时,遇到的一个问题就是:为什么c++可以支持重载?而c语言却不可以?这个问题看似很简单,但是具体让你讲解的话,你可以问问自己,可不可以不加思考的道出一切缘由?如果不可以,那么恭喜你,这篇文章你看完之后,一定会懂得这是为什么,如果你明白,那么这篇文章你就不需要看了。首先,这是由于c/c++函数名字在编译时的修饰规则不同,函数的名字修饰(Decorated Name)——编译器在编译期间原创 2017-01-15 22:12:51 · 1205 阅读 · 1 评论 -
注释转换
用状态机将c语言的注释转换为c++的注释先来了解一些状态机的概念。状态机:就是一组 状态,各个状态之间,依据一定的条件,(如输入一个 1 或者是 0)存在一定的转换,(从状态X转换到状态Y)它有 一个 起始状态和 若干 终结状态,从起始状态开始,根据输入的串转换状态,直到所有的输入的被状态机处理,看看追最后停留的状态是否为终结状态,是的话就说这个 串原创 2016-12-17 16:34:49 · 330 阅读 · 0 评论 -
通讯录终极版(文件)
之前我已经写过了两篇通讯录,第一篇只是简单的实现通讯录的一些操作,使用顺序表,但是它存在的缺点是向通讯录添加的人数是固定的,当通讯录满的时候就不能再添加了。 这时才有了第二篇,第二篇是在第一篇的基础上改进的,给通讯录动态开辟空间,当通讯录满的时候还可以追加内存空间。 不过第二版也有它的缺点,那就是每次执行程序时你都必须把通讯录中的成员信息再重新输入一遍,当通讯录中的人员原创 2016-12-17 16:12:55 · 894 阅读 · 0 评论 -
用c语言实现三子棋的游戏
#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<time.h>#define ROWS 3#define COLS 3void menu();void init_board(char arr[][COLS], int x, int y);//初始化棋盘void print_board(char arr[][原创 2016-11-05 07:56:03 · 928 阅读 · 0 评论 -
判断两个链表是否相交?若相交,求交点(假设链表带环)
前言: 深知自己对于这个知识点掌握的不是很好,故好好思考,并记录下思考后的成果。图示链表带环相交问题:既然已经分析清楚,那么代码就很好实现了。。。Node* IsHaveCrossNode(Node* head1,Node* head2) { assert(head1); assert(head2); Node* meetNode1 = Is原创 2017-07-19 00:43:30 · 956 阅读 · 1 评论 -
根据类(不能被继承、只能在栈上/堆上创建对象)的特点设计一个类
一、设计一个类不能被继承二、设计一个类只能在栈上创建对象三、设计一个类只能在堆上创建对象原创 2017-07-16 19:44:06 · 617 阅读 · 0 评论 -
二叉树的面试题
1. 求两个节点的最近公共祖先节点假设现在找的是节点X1和X2的最近的公共祖先节点。 这里由于这棵树的结构或者说是特点从而导致这颗树的解法会有多种思路:第一种就是这棵二叉树是一个搜索二叉树,那么可以根据搜索二叉树的特点从而找出两个节点的最近的公共祖先节点。 可以想到,如果X1在一个节点的左子树,X2在一个节点的右子树,或者X1在一个节点的右子树,而X2在一个节点的左子树,这样就可以原创 2017-07-14 20:16:44 · 1206 阅读 · 0 评论 -
单链表的面试题总结--------图形解析
1.// 删除无头单链表的非尾结点,要求:不能遍历单链表因为没有头结点,所以不能用固有的思维去考虑这个问题,因为是单链表,所以不能由链表中的后一个节点去找前一个节点, 所以这时需要转化一种思维,不能删除一个节点的前一个节点,但是可以去删除一个节点的后一个节点, 首先应该判断pos是否为空,如果为空,直接返回,如果不为空,分析如图示(利用转换思想)在这里还应该思考:为什么是删除非尾节点?—-如果原创 2017-01-02 00:57:42 · 704 阅读 · 0 评论 -
将字符串转换为整数
或许一听到这个问题,很多人可能会说:这很简单呀,可是我用自己做了实验,结果战况惨烈,下面是我从看到这道题到最终考虑各种条件后所写程序的历程,希望可以对你有一点启示。一开始我的思路是:要将一个字符串转换为整数❶ 首先判断字符串的第一个字符,是‘+’或者‘-’,定义一个变量来表示转换出来后整数的正负,如果第一个字符既不是‘+’也不是‘-’,那么就默认是正数。❷接下来判断下一个字原创 2016-12-25 17:07:41 · 497 阅读 · 0 评论 -
将字符串中的空格用 代替
将字符串“we are happy”转换为“we%20are%20happy”#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includevoid My_Replace(char *arr){ char *start = arr;//"we are happy\0"start指向字符串首地址 char原创 2016-11-01 15:19:26 · 1317 阅读 · 0 评论 -
求一组成对出现的数据中的单身狗
第一种方法:#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includeint find_diff(int *arr,int sz){ int i = 0; int j = 0; for(i=0; i<sz; i++) { for (j=0; j<sz; j++原创 2016-11-01 13:42:00 · 429 阅读 · 0 评论 -
模拟库中的字符串处理函数
1.模拟实现strcpy函数的功能#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>char *my_strcpy(char *dst,char const *src){ char *ret = dst; assert(dst); assert(s原创 2016-11-20 22:12:16 · 321 阅读 · 0 评论 -
用c实现strstr函数(子字符串查找)功能
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>char *mystrstr(const char *dst_str,const char *src_str)//子字符串查找函数{ const char *dst_start原创 2016-11-12 19:44:22 · 1620 阅读 · 0 评论 -
字符串的左旋问题解析
1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA第一种方法:思路:先将一个字符串左移一位,可以使用一层for循环来实现, 然后每次都可以调用这层循环,调用移位的次数,还有就是, 循环次数如果大于字符串的长度,会重复执行一些无用的 操作,所以给step模上字符串的长原创 2016-11-12 12:41:37 · 544 阅读 · 0 评论 -
关于对象模型的几个面试题(很基础,但坑较多)
可能是因为光是看书,关于看到的知识点也不会去深思各种各样的场景去构造,导致遇到一些很基础的问题都会犯二,写此篇博客,特警示自己: 学知识,最重要的是思考!!!如果关于对象模型你还有那么一点兴趣,那么可以继续向下看,看看自己是否可以完全答对。。。1.面试题(选择题):下面我贴出的是主要的代码片,头文件以及using namespace std;需要自行添加哦!class A{public :原创 2017-04-08 00:09:27 · 1728 阅读 · 1 评论 -
误将/root剪切复制到其他目录下出现bash-4.1# 如何修改
在练习指令时,因为不小心把/root剪切到了其他目录下, 从而出现bash-4.1# 。可以通过以下命令来进行修改,将其恢复: 先打开终端,进入一般用户的主工作目录,然后 pwd(可以查看当前目录)将下图中需要拷贝(cp)的东西拷过去即可。bash-4.1# cd /home/wxbash-4.1# cp ./.bashrc /rootbash-4.1# cp ./.bash_profi原创 2017-03-19 10:15:02 · 323 阅读 · 0 评论 -
浅析有关链表的带环问题
概要: 有关链表带环问题的面试题: *判断一个链表是否带环? *求环的长度? *求环的入口点?1、判断链表是否带环?//判断一个链表是否带环 //思路:快慢指针,返回相遇点 Node* IsCircle(Node* head) { if (head == NULL) { return NULL;原创 2017-07-16 12:25:45 · 368 阅读 · 0 评论 -
c语言练习题(面试题)
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第一,我第三。B选手说:我第二,E第四。C选手说:我第一,D第二。D选手说:C最后,我第三。E选手说:我第四,A第一。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。解析如下:这道题的想法是这样子的,利用穷举的方法列出所有的情况,可以使用一种比较简单的思维去考虑这个问题,定义5个变量,使原创 2016-12-09 22:42:19 · 615 阅读 · 0 评论 -
用main函数的参数实现简易计算器
调用堆栈可以出现主函数的调用者 mainCRTStartup 函数调用main函数 main( int argc, char *argv[ ], char *envp[ ] ) 第一个参数是argc——-表示argv数组的容量 第二个参数argv———是一个指针数组,数组里面保存的是字符串的首地址 第三个参数的环境变量例如: 输出结果如下:原创 2016-11-22 22:15:45 · 794 阅读 · 0 评论 -
在一个字符串中查找第一个只出现一次的字符,要求复杂度为O(N)
注意:这道题的特点是查找出现一次的字符,那么就可以利用字符的特点,因为字符的个数不可能大于256,所以就可以用一个含有256个元素的数组统计所有字符出现的次数,最后再遍历一遍数组,找到次数为1的字符即可。//在一个字符串中查找第一次只出现一次的字母,要求复杂度为O(N)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdl原创 2016-11-22 12:51:18 · 1267 阅读 · 0 评论 -
在杨氏矩阵中查找一个元素
题目:有一个二维数组.—-杨氏矩阵 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);1 2 3 4 5 6 7 8 9 分析:右上角的元素是第一行中最大的一个元素,是第三列中最小的一个元素,所以可以将要查找的元素与右上角的元素比较,如果这个元素大于右上角的元素,那么可以删去一行,因为这个元素已经比这一行中最大的元素还大,原创 2016-11-22 00:54:31 · 625 阅读 · 0 评论 -
冒泡排序和选择排序法的图示解析
思路:在进行冒泡法排序(升序)时,需要将数组元素(len)两两比较,如果 前面的元素大于后面的元素,则交换两个数,否则,比较下一个元素和它的下一个元素的大小,依次执行,执行一次循环,可以找到当前数组中最大的一个元素,然后问题规模变小,然后找出len-1个元素里的最大值,使之成为第二大元素,依次执行,需要在外层嵌套一层循环。 优化:考虑如果数组中的数据已经是排好序的,那么就不需要遍历那原创 2016-11-22 00:25:14 · 11126 阅读 · 0 评论