C/C++
C初级 -> C&C++过度 -> C++进阶。
askunix_hjh
这个作者很懒,什么都没留下…
展开
-
C++/java设计模式汇总
一、概述二、创建型1. 单例(Singleton)2. 简单工厂(Simple Factory)3. 工厂方法(Factory Method)4. 抽象工厂(Abstract Factory)5. 生成器(Builder)6. 原型模式(Prototype)三、行为型1. 责任链(Chain Of Responsibility)2. 命令(Command)3. 解...原创 2019-11-09 20:15:39 · 1060 阅读 · 0 评论 -
静态库和动态库的区别
库的作用: 库是共享程序代码的方式,一般分为静态库和动态库。库实现了某些特定的功能模块化。方便分享和使用!异同点:2.静态库和动态库有什么特点?- 不同点:静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。- 共同点:静态库和动态...原创 2018-08-17 00:40:41 · 1096 阅读 · 0 评论 -
C语言的内存管理机制
内存资源是非常有限的。尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源。本文是作者在学习C语言内存管理的过程中做的一个总结。变量概念:全局变量(外部变量):出现在代码块{}之外的变量就是全局变量。局部变量(自动变量):一般情况下,代码块{}内部定义的变量就是自动变量,也可使用auto显示定义。静态变量:是指内存位置在程序执行期间一...原创 2018-07-22 15:39:30 · 15514 阅读 · 3 评论 -
模拟实现库函数memcpy、memmove
模拟库函数memcpy函数原型:void *memcpy( void *dest, const void *src, size_t count );函数功能: memcpy函数是从源字符串中取前count个地址字符放入到目标字符串前count个地址位置,目标字符串前count个地址原有字符将被覆盖。 memcpy还可以操作数组元素。模拟实现(第一次写的漏洞):...原创 2018-07-22 13:45:28 · 1198 阅读 · 0 评论 -
从斐波那契数列开始了解递归和尾递归的区别
递归函数是指一些会在函数内调用自己的函数,如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环。这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的。如果有尾部归递,就只需要叠套一个堆栈,因为电脑只需要将函数的参数改变再重新调用一次。利用尾部递归最主要的目的是要优化。...原创 2018-07-17 21:25:08 · 1707 阅读 · 0 评论 -
模拟库函数 atoi 和 itoa
atoi原型:int atoi( const char *string );atio()函数传入一个 char *,返回 int 。int my_atoi(const char *str){ assert(str); int num = 0; int flag = 1; //跳过空白字符 while (*str == ' ' || *s...原创 2018-07-14 16:31:11 · 1112 阅读 · 0 评论 -
C语言实现通讯录(增删查改、排序、清空、打印等功能)
写在前面:C语言通讯录可以用来存储1000个人的信息,每个人的信息包括姓名、年龄、性别、电话、住址,实现基本的增、删、查、改、排序、打印、清空基本功能。思路分析:首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息。所以头文件里应该包括一个结构体,这个...原创 2018-06-17 23:04:24 · 9262 阅读 · 0 评论 -
【面试题】空格替换
描述: 实现一个函数,把字符串中的每个空格替换成“%20”。 例如: 输入:我是个男孩! 输出:i%20am%20a%20boy!问题拓展: 这样的问题在网络编程中会实际运用,如果URL参数中含有特殊字符,如空格, '#'等,可能会导致服务器无法获得正确的参数值,所以就需要将这些字符转化为可以识别的字符。 转换规则是在%后面加上ASCII码...原创 2018-05-25 11:23:21 · 396 阅读 · 0 评论 -
青蛙跳台阶问题求解
原创 2018-05-09 16:14:56 · 1177 阅读 · 0 评论 -
求二进制中“1”的个数
题目描述:对于一个字节(8位)的无符号整型变量,二进制表示中“1”的个数,要求算法的执行效率尽可能高。方法一 思路:首先比较好的方法是想到对二进制数进行 >>和&,这样就可以逐步求出序列中“1”的个数.(注:1&1=1, 1&0=0, 0&0=0)int Count(int num){ int count = 0; while (num) { cou原创 2018-04-26 00:20:23 · 1196 阅读 · 0 评论 -
C语言~对可变参数列表的简单理解
C语言编程中有时会遇到一些参数个数可变的函数。例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式: printf("%d",i); printf("the number is %d ,str原创 2017-08-07 21:58:06 · 448 阅读 · 0 评论 -
四种强制类型转换
四种强制类型转换在实际开发中使用场景比较较多,做以下总结:(一)用法:static_cast <类型说明符> (变量或表达式)它主要有如下几种用法:(1)用于类层次结构中基类和派生类之间指针或引用的转换进行上行转换(把派生类的指针或引用转换成基类表示)是安全的进行下行转换(把基类的指针或引用转换为派生类表示),由于没有动态类型检查,所以是不安全的(2)用于基本数据类型之间的...原创 2018-12-08 17:14:54 · 7053 阅读 · 0 评论 -
迭代器与指针的区别
迭代器与指针的差别:迭代器:(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,-&gt;, * ,++, --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据...原创 2018-10-18 22:04:18 · 2119 阅读 · 2 评论 -
STL:vector扩容、销毁、与list和deque的区别
1、vector是怎么扩容的?reserve()是容器预留空间,但并不真正创建元素对象。resize()是改变容器的大小,并且创建对象。两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数。vector&lt;in...原创 2018-10-18 22:04:36 · 1603 阅读 · 0 评论 -
C++11 智能指针
本文介绍三个智能指针:unique_ptr、shared_ptr、weak_ptr。auto_ptr已经被C++11丢弃了。C++的内存管理中,当我们写一个new语句时,一般立即跟一个delete,但是也很难保证没有运行到delete就返回了。申请的资源没有释放,就会造成内存泄露。智能指针解决了哪些问题:1、忘记调用delete释放内存。2、程序异常的进入catch块忘记释...原创 2018-08-05 22:42:16 · 1146 阅读 · 0 评论 -
C++内存模型
以下内容,大部分整理自网络C分为四个区:堆,栈,静态全局变量区,常量区。详情阅读:C语言内存模型C++内存分为5个区域(堆栈全常代 ):(1)堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete)。如果程序员没有释放掉,在程序结束时OS会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”(2)栈 sta...原创 2018-08-05 13:32:41 · 2188 阅读 · 2 评论 -
this指针能否为空指针?
首先我们知道,this指针指向的是当前对象。测试代码: 空指针p同时访问了 test() 函数和 change() 函数,在 test() 函数调用过程中没有报错,但是在 change() 函数中报错了。实际上这两个类是这样的:void test(person *const this){}void change(person *const this){ c...原创 2018-08-04 23:55:51 · 2601 阅读 · 0 评论 -
static作用 & const作用
static作用:面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0(3) 该变...原创 2018-08-04 22:46:41 · 1204 阅读 · 0 评论 -
构造函数能不能声明为虚函数,析构函数呢?为什么?
一:构造函数不能声明为虚函数的原因?构造一个对象时,必须知道对象实际类型,而虚函数是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功,编译器就无法知道对象的实际类型,是该类本身,还是派生类,还是其他。虚函数的执行依赖于虚函数表,而虚函数表是在构造函数中进行初始化的,即初始化虚表指针(vptr),使得正确指向虚函数表。而在构造对象期间,虚函数表(vtable)还没有被初始化...原创 2018-08-04 18:08:51 · 3107 阅读 · 1 评论 -
回炉重造——虚函数和纯虚函数
写在前面C++中的虚函数的作用主要是实现了多态的机制。多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用相同的代码来实现可变的算法。C++虚函数 概念用virtual关键字修饰的函数就叫虚函数。虚函数实现机制:C++编译阶段,没办法...原创 2018-08-03 16:13:45 · 1052 阅读 · 0 评论 -
C++类的六个默认成员函数
类的六个默认成员函数: 1、构造函数概念:(1)构造函数是用于构造新对象,并将初始值赋给对象的数据成员。(2)类型转化,适用于单参的构造函数。用explicit修饰构造函数,抑制由构造函数定义的隐式转换,erplicit关键字类内部的构建声明上,在类的定义体外部的定义上不再重复。特征:(1)构造函数的函数名与类名相同;(2)构造函数无返回值;(3)...原创 2018-07-30 12:41:10 · 1299 阅读 · 0 评论 -
【STL】算法使用篇
一、概述STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。“algorithm” 是所有STL头文件中最大的一个(尽管它很好理解),...原创 2018-07-26 17:36:24 · 751 阅读 · 0 评论 -
C、CPP文件是怎样运行起来的?
C、CPP文件是怎样运行起来的?这个问题就是编译、运行的问题,在很多面试中都会遇到。(今日头条的研发岗面试题就问到cpp文件是怎样运行起来的?)在此,详细说明C语言的编译运行过程,CPP参考一下也就很容易明白了。C语言是怎么运行的?首先放一张图,说明C语言的运行过程。 C语言要想运行就要经过翻译环境,将 .c/.h 文件翻译成机器可以识别的机器码;这个翻译过程可以分为编译...原创 2018-07-04 09:45:45 · 26280 阅读 · 0 评论 -
分析Perm()函数功能、代码、时间复杂度
Perm()函数功能: Perm函数的功能是将传递过来的数组的后size - N 位进行全排列,将排列的每一组数都输出。代码实现:#include<iostream>#include<String>using namespace std;void Perm(int* array, int size, int N) //全排列{ i...原创 2018-04-01 13:34:37 · 13973 阅读 · 0 评论 -
C/C++关键字 asm、inline、register、virtual、volatile 详解
asm:asm允许你在你的代码中直接插入汇编语言指令, 各种不同的编译器为这一个指令允许不一致形式, 比如: asm { instruction-sequence }or asm( instruction );inline:inline这个关键字请求编译器扩张一个给定的函数。它向这个函数发出一条插入代码的call。函数里面有静态变量,...原创 2018-02-28 11:05:07 · 3257 阅读 · 0 评论 -
详解地址和引用的区别
★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,con...原创 2018-02-14 14:24:17 · 7773 阅读 · 0 评论 -
三角形的类型判断和面积计算
在一些图形计算以及运用当中,常常需要对三角形做计算和处理,这些计算和处理也已转化成为针对这个三角形的结构体的处理。程序设计: 要求用户输入三角形的三条边长,判断三角形的类型,并求出三角形的面积。#include<iostream>#include<cstdlib>using namespace std;typedef struct Triangle...原创 2018-02-14 13:20:23 · 863 阅读 · 0 评论 -
main函数的三个参数(argc、argc、envp)详解
函数原型: int main( int argc, char *argv[], char *envp[] ) The main function marks the beginning and end of program execution. A C or C++ program must have one function named main. If your code原创 2018-01-01 00:54:44 · 7932 阅读 · 0 评论 -
C语言—动态内存分配
头文件:#include malloc() 函数原型为:void* malloc (size_t size);【参数说明】size 为需要分配的内存空间的大小,以字节(Byte)计。【函数说明】malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。如果希望在分配内存的同时进行初始化,请使用 call原创 2017-04-25 21:15:27 · 339 阅读 · 0 评论 -
VS2013编写代码时的光标变成了黑块,黑块选中了字,再输入的时候就会替换掉那个黑块选中的字
vs2013、vs2008中解决光标两种模式插入模式和改写模式 切换键为 Insert改写模式(光标样式如图所示)插入模式(光标样式如图所示)Insert在插入和改写插入模式之间切换,仅在使用文本编辑器中可用。原创 2017-10-06 16:13:43 · 9567 阅读 · 0 评论 -
C/C++ 中assert()函数用法总结
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。原型定义:#include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终...原创 2017-05-06 22:14:41 · 11072 阅读 · 0 评论 -
C语言~三子棋游戏的实现
简单的三子棋游戏是指棋盘为3*3,玩家与电脑之间的对决,谁先将各自的棋下为一排(横/竖/斜)者获胜,电脑所下位置是随机产生的;源代码如下:game,h中定义的函数:#define ROWS 3 #define COLS 3 void init_board(char board[ROWS][COLS], int rows,int cols);//初始化棋盘 v...原创 2017-05-07 22:09:06 · 570 阅读 · 0 评论 -
C语言~模拟库函数Strlen,Strcpy, Strcmp.
1,strlen()函数的实现 strlen()函数功能是计算字符串中字符个数,而字符本身就是一个字符数组,只不过末尾以‘\0’结束。 int my_strlen(const char *str) //strlen函数模拟实现{int count = 0;assert(str != NULL); //断言wh原创 2017-05-07 22:14:18 · 515 阅读 · 0 评论 -
C语言~size_t详解
1、sizeof返回的必定是无符号整形,在标准c中通过 typedef 将返回值类型定义为size_t. 若用printf输出size_t类型时,C99中定义格式符%zd;若编译器不支持可以尝试%u或%lu. sizeof,获取操作数占用的内存空间字节数,返回类型size_t; strlen,获取字符数组实际使用的字节数,不包含数组结尾符’\0’,返回类型size_t。2、它是原创 2017-05-14 22:12:24 · 15379 阅读 · 0 评论 -
C语言~模拟实现通用冒泡排序
函数原型:void qsort( void *base, size_tnum, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) )以上原型是MSDN中查找出的qsort函数,共有四个参数;各个参数: 1、base —— 待排序数组首地址(int arr[10]) 2原创 2017-06-03 21:11:22 · 533 阅读 · 0 评论 -
指针数组、数组指针、函数指针、函数指针数组详解
总结指针和数组部分的相关知识自己写的一遍博客:指针是变量单元的地址,地址指向该变量单元,因此地址形象的称为“指针”,通过指针(地址)可以找到内存单元。 (总结)1.指针是存放地址才出现的,地址是为了标示一块地址空间的; 2.指针让地址有地方存放,指针让内存的访问更加方便; 3.指针的大小在32位平台是4个字节,在64位平原创 2017-09-25 16:40:57 · 1691 阅读 · 0 评论 -
模拟实现strncpy、strncat、strncmp库函数
在C语言string这个库中的strcpy,strcat,strcmp这三个函数是通过传递数组的内容来限制它们的,用传参的方式现实字符串的改变长度,模拟实现如下:1、strncpy:char* my_strncpy(char *dest, const char *src, int sz){ assert(dest && src); int i = 0; char *ret = de原创 2017-10-06 17:53:19 · 428 阅读 · 0 评论 -
C++~无头单链表基础操作
单链表是一种数据存储结构,是一种链式存储的线性表,用一组任意的存储单元存放线性表的元素,称存储单元为一个节点。 1.单链表结构:typedef int DataType; //int类型重命名typedef struct Node{ DataType data; struct Node* pNext;}Node, *PNode; /原创 2017-10-09 22:41:36 · 762 阅读 · 0 评论 -
this指针详解
对于C++的this指针作者根据自己理解,作以详解: 首先,this指针是一种隐含指针,隐含在每个类的成员函数中,是每个成员函数具有的默认参数,也就是每个成员函数都有一个this指针。this指针指向该函数所属类的对象,因此,成员函数访问类中数据成员的格式可写成: ...原创 2017-10-24 20:42:19 · 2164 阅读 · 0 评论 -
C++ ~ Time类实例研究
Time类的定义: 类中的定义包含成员函数Time、setTime、printUniversal、printStandard的函数原型,以及private unsigned int成员hour、minute、second。只能通过Time类的成员函数访问它的private数据成员。下面的例子是我的简单Time类演示代码:time.h文件#ifndef __TIME_H__#原创 2017-11-04 22:43:31 · 1866 阅读 · 0 评论