C/C++
文章平均质量分 71
Rae8023
这个作者很懒,什么都没留下…
展开
-
[C语言]strlen与sizeof的区别与联系
strlen原型:size_t strlen( const char *string ); strlenC语言中的一个函数,用于计算字符串的(unsigned int型)长度,不包括’\0’在内。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始遍历,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。原创 2017-02-17 11:29:41 · 741 阅读 · 0 评论 -
【C++】动态内存管理
C语言中使用malloc/calloc/realloc/free进行动态内存管理,malloc/calloc/realloc用来在堆上开辟空间,free将申请的空间释放掉。void Test(){// mallocint * p1 = ( int*) malloc(5 * sizeof( int));if ( p1 != NULL){free( p1);p1 = NULL;}//原创 2017-07-16 12:38:55 · 546 阅读 · 0 评论 -
【C++】多态及其对象模型
多态 多态是面向对象程序设计的重要特征之一,在C++中多态可以这样定义:同一操作作用于不同类的实例,将产生不同的执行结果。也就是说,不同的类的对象收到相同的消息时,得到不同的结果。 【**多态的对象模型】–单继承&多继承 虚表剖析 虚表是通过一块连续内存来存储虚函数的地址。 单继承 首先我们先写一个可以打印虚表的函数//该函数只能在32位平台下打印虚表typedef voi原创 2017-07-30 17:20:03 · 470 阅读 · 0 评论 -
【C++】c++中的继承
1、什么是继承? 我们都知道继承性在客观世界中是一种常见的现象。在我们了解C++的继承之前,让我们先介绍一个现实世界中“动物”的例子,它们之间的属性继承关系如图所示: 从面向对象的观点来看,继承所表达的正是这样一种类与类之间的关系,这种关系允许既有类在的基础上创建新类,增加了软件的重用性,减少了工作量。 继承方式不同所引起的访问控制关系变化: 2、基类与派生类 C++允许从一个类“原创 2017-04-05 11:08:26 · 786 阅读 · 1 评论 -
【C++】深拷贝、浅拷贝和写时拷贝
大家首先来看一下下面这段代码:void Test(){ int *p1 = new int[10]; int *p2 = p1; delete[] p1; delete[] p2;}运行这段代码: 我们发现这段程序无法运行,经过测试我们发现,p1和p2指向同一块空间: 这就是我们所说的浅拷贝。 浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结原创 2017-07-17 15:35:01 · 1231 阅读 · 0 评论 -
【C++】构造拷贝构造的N中调用情况的问题
C++对传参合传返回值时构造的优化处理 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. C++中的返回值优化(return value optimization) 返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建原创 2017-07-19 17:14:24 · 552 阅读 · 0 评论 -
【C++】为什么模板不支持分离编译
在C++中,为了一个项目的规范,我们通常把代码归为三类:声明文件、实现文件、测试文件。例如下面的例子://test.hvoid fun(); //声明一个函数fun//test.cpp#include"test.h" void fun() //实现出test.h中声明的fun函数{ //do something}//main.cpp#i原创 2017-08-03 21:13:38 · 440 阅读 · 0 评论 -
【C++】list的使用方法
list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。 与vector相比, 它允许快速的插入和删除,但是随机访问却比较慢. 首先我们来看一下list都有哪些接口: list中常用的函数 front()原创 2017-09-03 20:17:47 · 1010 阅读 · 0 评论 -
【C++】智能指针
先来看一段代码:void Test(){ int* p1 = new int(5); bool End = true; //DoSomething if(End = true) //此时如果条件成立,直接return,就会造成我们前面用new开辟的空间不能释放,从而导致内存泄漏。 { return;原创 2017-09-02 13:21:54 · 264 阅读 · 0 评论 -
【C++】vector的使用方法
声明:文章中编程环境均为VS2013编译器vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。首先我们来看一下vector的接口: 1、使用vector需要添加头文件#include<ve原创 2017-09-03 17:50:21 · 486 阅读 · 0 评论 -
单链表面试题——进阶篇
1.判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度。 判断是否带环:利用快慢指针,快指针每次走两步,慢指针每次走一步,如果快慢指针相遇,则该链表带环。ListNode* IsHaveLoop(ListNode* plist){ if (plist == NULL) { return NULL; } Li原创 2017-07-15 15:59:54 · 499 阅读 · 0 评论 -
类和对象1--四个默认成员函数+运算符重载
类的声明和定义 C++中的类的定义一般分为类的声明和类的实现部分。类的声明部分用来说明该类的成员(数据成员、成员函数),告诉使用者“干什么”。类的实现部分用来定义成员函数,该函数用来对数据成员进行操作,告诉使用者“怎么干”。class<类名>{ public: <成员函数或数据成员的说明> protected: <成员函数或数据成员的说明> private:原创 2017-06-24 23:50:56 · 708 阅读 · 0 评论 -
【C语言】理解指针数组 数组指针 函数指针
首先我们来看一下指针与数组的区别: 指针数组与数组指针 指针数组:储存指针的数组 首先它是一个数组,数组的元素都是指针,数组占多少字节由数组本身决定。 例如: int *arr1[5]; //”[ ]”的优先级高于”*”,首先它是一个数组,数组名为arr,int *修饰的是数组的内容,数组中包含5个指向int数据的指针。 **数组指针**:指向数组原创 2017-02-15 09:53:17 · 971 阅读 · 0 评论 -
【顺序表】用c语言简单实现顺序表
今天,写了一个简单的顺序表,跟大家分享一下(我是先写的静态,后改的动态,中间的一些注释是原来的静态):test.h#ifndef __SEPLIST_H__#define __SEPLIST_H__#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>//#define MAX 100#defin原创 2017-02-23 22:33:59 · 1280 阅读 · 0 评论 -
模拟实现strstr
1、什么是strstr? strstr() 函数:是用来搜索一个字符串在另一个字符串中的第一次出现。 函数原型:char *strstr( const char *string, const char *strCharSet ); 2、模拟实现strstrchar *my_strstr(char *string,char *strCharSet){ char* start = s原创 2017-04-19 20:09:03 · 461 阅读 · 0 评论 -
反转链表
第一种:class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode* pNode=pHead; //当前指针 ListNode* pReverseHead=NULL; //新链表的原创 2017-04-19 22:48:17 · 532 阅读 · 0 评论 -
【C++】浅谈C++模板
我们知道C++是一种“强类型”语言。也就是说,对于一个变量,编译器必须确切知道它是什么类型。但是,这种强类型函数在实现一些简单函数反而更麻烦。例如:求两大数的较大者,应以Max( )函数,我们需要对不同数据类型分别定义不同重载版本来实现:int Max(int x,int y) //比较两个int类型的值{ return ((x > y) ? x : y);}float原创 2017-04-16 16:26:13 · 712 阅读 · 0 评论 -
【C++】C++异常处理
一、什么是异常? 异常就是程序在运行过程中,由于使用环境的变化及用户的错误操作而产生的错误。 二、传统错误处理办法: 1.终止程序(除数为0) 2.返回一个表示错误的值,附加错误码(GetLastError()) 3.返回一个合法值,让程序处于某种非法的状态(坑爹的atoi()) 4.调用一个预先准备好在出现”错误”的情况下用的函数(回调函数)。 5.暴力解决方式:abort()或者e原创 2017-04-27 22:01:06 · 658 阅读 · 0 评论 -
【C++】基础知识篇
1.命名空间 在C++中,标识符(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等。为了避免在大规模程序设计中以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间),以便更好控制标识符作用域。 定义格式如下:namespace 命名空间{命名空间声明内容}例如:定义两个命名空间AA1,AA2#include<io原创 2017-06-19 11:58:02 · 517 阅读 · 0 评论 -
C语言实现单链表面试题--基础篇
1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?(1). 顺序表支持随机访问,单链表不支持随机访问。 (2). 顺序表插入/删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入/删除效率更高,时间复杂度为O(1)。 (3). 顺序表的CPU高速缓存效率更高,单链表CPU高速缓存效率低。2.从尾到头打印单链表void reverse(ListNode* plist)原创 2017-06-19 18:03:55 · 621 阅读 · 0 评论 -
【C++】隐含的this指针
当我们在进入一个房子之后,你可以看见房子里面的桌子、椅子、地板,但是你看不到房子的全貌,对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢? this是一个指针,它时时刻刻指向这个实例本身。 在类的成员函数内部,暗含着一个名字是this的指针,这个指针指向了调用该函数的类对象。 下面我们来看一个简单的例子:class Employee{pubilc:原创 2017-03-12 11:13:28 · 2673 阅读 · 0 评论 -
序列化和反序列化
什么是序列化和反序列化?把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象–这两个功能就是序列化和反序列化。 序列化:把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程称为对象的反序列化数据结构、对象与二进制串不同的计算机语言中,数据结构,对象以及二进制串的表示方式并不相同。数据结构和对象:对于类似Java这种...原创 2018-08-13 13:45:59 · 306 阅读 · 0 评论