
C++和C语言
文章平均质量分 74
C++和C语言学习
xuruhua
少说多做
展开
-
智能指针二
一、智能指针:1、智能指针给出的原因 2、智能指针原理RAII:在构造函数中分配资源,在析构函数中释放资源,可以进行解引用或者通过->访问空间中的结构体变量。需要重载这几个符号。(迭代器也是把指针进行了封装、也进行了解引用、也进行了重载,所以迭代器也可以成为一种类型的智能指针)3、了解哪些智能指针迭代器也是把指针进行了封装、也进行了解引用、也进行了重载,所以迭代器也可...原创 2018-12-03 11:17:56 · 126 阅读 · 0 评论 -
二叉树,非递归实现(前序、中序、后序)
一、结合栈的方式实现,先让右孩子入栈,再让左孩子入栈。栈为空后,结束遍历。头文件.根据具体的函数名自己创建,另外需要使用栈,引用栈的头文件 stack.h# pragma oncee# include<stdio.h># include<stdlib.h># include<string.h># include<assert.h&...原创 2018-11-13 11:28:49 · 1470 阅读 · 0 评论 -
STL:上
STL:C++标准模板库A、HP版本------SGI(所有的SGI版本都是继承自HP版本1、常用的数据结构的封装2、通用的算法:模板(让处理的数据与类型无关)+仿函数(函数指针)B、六大组件:容器:a、线性结构(序列式容器)string:管理字符串(字符串类型的动态顺序表)array:静态顺序表(C++11)vector:动态顺序表list:带头节点的双向...原创 2018-12-03 11:18:53 · 161 阅读 · 0 评论 -
智能指针
一、资源分配即初始化:定义一个类来进行资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放(构造函数负责把资源分配给你,析构函数负责释放资源)建议:在任何时候都不要使用AutoPtr,除非不用调用拷贝构造、赋值运算符的重载template<class T>class AutoPtr{public: AutoPtr...原创 2018-12-03 11:18:13 · 148 阅读 · 0 评论 -
多态二:带有虚函数的虚拟继承
1、普通函数的继承class Base{public: virtual void Test1() { cout << "B::Test1()" << endl; } virtual void Test2() { cout << "B::Test2()" << endl; } int _b;};...原创 2018-12-03 11:17:29 · 519 阅读 · 0 评论 -
读书笔记(一)
一、 计算机其实就是:接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息。因此,只要有输入设备(不管是键盘还是触摸式屏幕)及输出设备(屏幕或直接打印出来),让你可以输入数据使该机器产生信息的,那就是一台计算机了。1、计算机硬件的组成:2 、CPU的种类: cpu内部已经含有一些小指令集,我们所使用的软件都要经过cpu内部的微指令...原创 2018-11-13 13:09:57 · 352 阅读 · 0 评论 -
二叉树的应用
一、层序遍历的应用:镜像:还需要引入队列,同上一篇博客。.h# pragma once# include<assert.h># include<malloc.h># include<stdio.h># include<stdlib.h># include<string.h># include"Queue.h"t...原创 2018-11-13 11:29:35 · 230 阅读 · 0 评论 -
c++操作符重载
一、运算符重载:1、定义:重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的 操作符符号。操作符重载也是一个函数,具有返回值和形参表。它的形参 数目与操作符的操作数目相同,使用运算符重载可以提高代码的可读性 返回值 operator 操作符(参数列表)(1)可以重载的运算符(除了不可重载的运算符,其余的操作符都是可以重载的操作符)(2)不可以重载的运算符2、赋值运算符:(...原创 2018-06-12 17:28:16 · 4981 阅读 · 0 评论 -
C++----动态内存管理
一、动态内存开辟1、C语言中c语言中malloc,calloc,realloc(1)共同点:a、都是从堆上开辟内存空间的,必须释放,否则会造成内存泄漏。 b、返回值:返回值都是"void *"(2)不同点:a、malloc只有一个参数,参数为所需要申请空间字节数的大小:malloc使用前一定要进行检测,防止拿到没用的空间。申请成功:返回申请的地址;失败:返...原创 2018-06-21 12:50:46 · 928 阅读 · 0 评论 -
c++(友元函数,静态成员)
一、友元:1. 友元函数 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不 属于任何类,但需要在类的内部声明,声明时需要加friend关键字。友元函数并不是类中的一个成员(1)注意:a、友元函数可访问类的私有成员,但不是类的成员函数b、友元函数不能用const修饰c、友元函数可以在类定义的任何地方声明(除了在函数体内),不受类访问限定符限制(不是类的成员函数)d、一个函数可以是...原创 2018-06-15 08:59:35 · 2186 阅读 · 0 评论 -
自定义类型和C语言中的动态内存管理
自定义类型:结构体、枚举、联合一、结构体:1、结构体的声明struct tag { member-list;}variable-list;struct:结构体关键字(不能缺省)tag:结构体标签,可以省略(匿名结构体类型)member-list:成员列表variable-list:变量列表struct Stu{ char name[20]; int age; cha...原创 2018-06-28 22:13:53 · 1105 阅读 · 0 评论 -
继承
一、继承继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样 产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现 了由简单到复杂的认知过程(1)继承的格式:基类,派生类区分是哪种权限:关键字(public,private,protect)出现在类里面:是一个访问限定符,判定成员在类外是否可以被访...原创 2018-07-14 14:10:54 · 232 阅读 · 0 评论 -
用类的形式封装顺序表
此前我已经实现了用C语言写一个顺序表,现在尝试使用c++;有需要的话可以浏览我之前的博客哦静态顺序表:https://mp.youkuaiyun.com/postedit/79772162动态顺序表:https://mp.youkuaiyun.com/postedit/79991561 typedef int DataType; class Vector { publi...原创 2018-07-01 18:40:21 · 880 阅读 · 0 评论 -
vector
一、vector:1、在库中的一些表达vector底层维护了一段动态的连续空间,随着元素的不断插入,vector的内部机制会自动检测,决定是否需要进行扩容以容纳新元素。三步操作:开辟新空间,拷贝元素,释放旧空间。 (1)构造,没有传任何参数,表示一个顺序表explicit vector ( const Allocator& = Allocator() );(2)...原创 2018-06-27 08:06:23 · 2195 阅读 · 0 评论 -
c++ ---const,内联函数
一、const修饰类成员const修饰形参,一般和引用同时使用 const修饰返回值 const修饰类数据成员,必须在构造函数的初始化列表中初始化(1)c语言和c++的区别:1,、A、在C语言中const修饰的变量具有常属性,但仍然为一个变量。在C语言环境下编译下述代码,会出现错误: int main(){ const int a= 20; int array[a]; return 0;...原创 2018-06-20 11:12:47 · 979 阅读 · 0 评论 -
String函数
一、string类1、(1)字符串:字符的集合,以‘\0'结尾。 (2)字符数组:存放字符的数组。2、封装一个字符串,即封装string类:(1) # define _CRT_SECURE_NO_WARNINGS# include<iostream># include<string.h>using namespace std;//string类管理字符串,空...原创 2018-06-25 15:27:49 · 6040 阅读 · 0 评论 -
C语言的几道面试题
1、实现一个对8bit数据(usigned char)类型的指定位(例如第n位)的置0或置1操作,功能保持其他位不变。函数原型:void bit_set(unsigned char *p_data,unsigned char position,int flag)p_data是指定的源数据;position是指定位(取值范围1~8);flag表示置0还是置1操作。2、实现字符串左循环移位函数,比如“...原创 2018-07-09 14:43:51 · 224 阅读 · 0 评论 -
哈希函数的优化
youhua.h# pragma once# include<stdio.h># include<string.h># include<stdlib.h># include<assert.h>#define MAX_SIZE 10typedef int DataType;typedef enum{ EXIST, EMPTY, DELETE}State...原创 2018-05-15 11:22:59 · 915 阅读 · 0 评论 -
哈希函数的开散列
一、哈希桶:1、通过哈希函数计算桶号 (1)哈希桶的最佳状态,就是每个桶下面挂一个元素(动态的可以增容:表格中的元素和总的个数相等):解决了一个哈希桶下面挂多个元素的情况(2)素数表泄露,则别人知道了增容方式,受到攻击。继续增容,导致插入相同元素的概率增加,一条表格下挂的元素增多,使性能下降。解决方法: 在下面挂一个红黑树,效率达到lgN2、每个桶下面挂一个链表,链表采用头插,效率高(尾...原创 2018-05-27 14:32:48 · 407 阅读 · 0 评论 -
排序算法一------插入排序,使用二分查找法对插入排序进行优化,希尔排序
外部排序:指数据不能一次性加载到内存里去内部排序:指数据能一次性加载到内存里去非比较排序:不用比较就能进行的排序比较排序:进行比较才能进行的排序稳定性:如两个学生按照学号排:a在b的前面,按照成绩排a还是在b的前面,则这种排序算法是稳定的;若是如两个学生按照学号排:a在b的前面,按照成绩排b在a的前面,则是不稳定的(成绩是有序的)排序算法分类: 1、插入排序:插入排序.h# pragma o...原创 2018-05-29 17:00:32 · 984 阅读 · 0 评论 -
不带头节点的单链表
.h# pragma once# include<stdio.h># include<stdlib.h># include<string.h># include<assert.h>typedef int DataType;typedef struct Node{ struct Node* _pNext; DataType _da...原创 2018-05-23 11:51:05 · 2723 阅读 · 0 评论 -
哈希
哈希函数一、简单的哈希函数.h# pragma once# include <stdio.h># include<stdlib.h># include<string.h># include<assert.h>#define MAX_SIZE 10typedef int DataType;typedef enum{ EXIST,EMPTY,DELETE...原创 2018-05-14 20:57:40 · 490 阅读 · 0 评论 -
带头节点的双链表
.h# pragma once# include<stdio.h># include<stdlib.h># include<string.h># include<assert.h>typedef int DataType;typedef struct DListNode{ struct DListNode* pNext; struct DListNo...原创 2018-05-09 15:26:12 · 157 阅读 · 0 评论 -
开启新世界的大门
一、冒泡排序:1、只能对整型数据进行冒泡排序# define _CRT_SECURE_NO_WARNINGS 1# include<stdio.h># include<stdlib.h># include<string.h>void BubbleSort(int arr[], int sz){ int i = 0; int j = 0; for ...原创 2018-05-31 17:51:33 · 1789 阅读 · 0 评论 -
哈希函数之开散列----优化
把发生哈希冲突的元素放在同一个桶下面,成为哈希桶每个链表下挂一个元素空间利用率最高优化:1、只能运用于整型:改变哈希函数中的内容:加函数指针或者将存放的数据类型转换为整型2、增容:因为链表个数大于总容量,导致哈希表的性能下降HashBucket.h# pragma once# include<stdio.h># include<assert.h># include&l...原创 2018-05-27 14:32:26 · 692 阅读 · 0 评论 -
线程的应用
线程的应用一、线程的创建:1.代码#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<pthread.h>//p表示posix线程库void*rout(void *arg){(...原创 2018-04-07 22:04:10 · 409 阅读 · 0 评论 -
模拟实现strcmp,memcpymemmove
# define _CRT_SECURE_NO_WARNINGS# include<stdio.h># include<stdlib.h># include<string.h># include<stdarg.h># include<assert.h>//1.实现strcmp【返回值(比较对应字符的ascII码值:(1)>0;(2)...原创 2018-04-14 22:33:13 · 178 阅读 · 0 评论 -
可变参数列表的应用
# define _CRT_SECURE_NO_WARNINGD头文件:# include<stdio.h># include<stdlib.h># include<string.h># include<stdarg.h>1.使用可变参数,实现函数,求函数参数的平均值。# include<stdarg.h>int average(int ...原创 2018-04-08 18:06:57 · 273 阅读 · 0 评论 -
旋转字符串
1.实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDABvoid reverse(char* dest, char* src){ assert(dest); assert(src); while (*dest < *src) { char tmp = *dest; *dest = *src; *src = tmp; dest++;...原创 2018-04-07 21:37:34 · 110 阅读 · 0 评论 -
基本进程的应用
一、进程的调度算法.(1)在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。(2)系统调用在使用上,功能比较基础,对用户的要求也比较高,所以,开发者可以对部分系统调用进行适度封装,从而形成库,从而很有利于更上层用户或者开发者进行二次开发。(3)操作系统是做管理的,管理者与被管理者不直接接触,管理者通...原创 2018-04-09 18:15:56 · 259 阅读 · 0 评论 -
自己实现一个shell
# include<unistd.h># include<sys/wait.h># include<stdio.h># include<stdlib.h># include<string.h>char *argv[8];int argc=0;void do_parse(char *buf){ int i; int status;...原创 2018-04-15 13:12:59 · 820 阅读 · 0 评论 -
模拟实现strcpy,strcat,strstr,strchr
# define _CRT_SECURE_NO_WARNINGS# include<stdio.h># include<stdlib.h># include<string.h># include<stdarg.h># include<assert.h>//1.实现strcpy【只可以拷贝字符串】//void my_strcpy(char ...原创 2018-04-13 18:59:52 · 110 阅读 · 0 评论 -
静态顺序栈的部分实现,括号匹配与逆波兰表达式
一、栈的定义及功能:栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。不包含任何元素的栈称为空栈,栈又称为后进先出的线性表。栈特性:后进先出(LILO)特殊线性表栈功能:将数据从一种序列改变到另一种序列二、栈的分类:1、顺序栈:顺序栈和顺序表数据成员相同,不同之处:顺序栈的入栈和出栈操作只允许对当前栈顶进行操...原创 2018-04-06 16:08:05 · 407 阅读 · 0 评论 -
汉诺塔和残缺棋盘
一、 汉诺塔问题1递归法:# include<stdio.h># include<stdlib.h> void Move(int n,char a,char b,char c){ if(n==1) { printf("只有一个盘子,直接从a移动到c:%c->%c\n",a,c); } else { Move(n-1,a,c,b); printf("将a上的n-...原创 2018-04-11 22:11:36 · 406 阅读 · 0 评论 -
转移表的应用
# define _CRT_SECURE_NO_WARNINGS# include<stdio.h># include<stdlib.h># include<string.h># include<stdarg.h># include<assert.h>//函数指针数组的⽤途:转移表//void menu()//{// printf("**...原创 2018-04-12 20:26:30 · 374 阅读 · 0 评论 -
变换
# define _CRT_SECURE_NO_WARNINGD# include<stdio.h># include<stdlib.h># include<string.h># include<stdarg.h># include<assert.h>//1.编写函数://unsigned int reverse_bit(unsigned...原创 2018-04-10 20:30:22 · 147 阅读 · 0 评论 -
判断{}是否成对出现
编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。 int main(){ char ch = 0; int count = 0; while ((ch = getchar()) != EOF) { if (ch == '{') { count++; } else if ((ch == '}') && (count ...原创 2018-03-27 21:05:21 · 376 阅读 · 0 评论 -
for语句和if语句的一些应用
1.5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。int main(){ int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; for (a = 1...原创 2018-03-28 12:42:18 · 3980 阅读 · 0 评论 -
判断一个数中二进制中1的个数
1.写一个函数返回参数二进制中 1 的个数比如: 15 0000 1111 4 个 1程序原型:int count_one_bits(unsigned int value){ 返回 1的位数}int count_one_bits(n){ int count = 0; while (n) { n = n&(n - 1); count++; } printf("%d ", count);}...原创 2018-03-27 21:35:28 · 972 阅读 · 0 评论 -
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?输入例子 :1999 2299输出例子 : 7int main(){ int a = 2; int b = 1; int i = 0; int count = 0; for (i = 0; i < 32; i++) { if ((((a^b) >> i) &a...原创 2018-03-28 11:42:54 · 385 阅读 · 0 评论