![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
C++学习整理
NTZ5bzZKdUw
这个作者很懒,什么都没留下…
展开
-
模拟实现memmove函数
1.描述void * memmove ( void * destination, const void * source, size_t num );不限定具体指针类型,仅仅按字节拷贝,可能出现截断等问题。优化memcpy了中的后目的重叠问题。由于数组作为形参会退化,所以我们不能解决越界访问,以及空间不够的问题。库函数没有安全检查,空指针,越界访问,以及空间不足会崩溃的问题。返回值为指向目的首地址的指针。源空间数据还是会被改变。2.代码展示#include<stdio.h>原创 2020-07-05 23:20:06 · 492 阅读 · 0 评论 -
模拟实现memcpy函数
1.描述void * memcpy ( void * destination, const void * source, size_t num );返回值,参数指针类型为void*按字节拷贝,源地址不可改。没有严格的安全检查,空指针,以及重叠问题,越界访问。2.代码展示#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>void* mymemcpy原创 2020-07-05 22:14:37 · 135 阅读 · 0 评论 -
模拟实现strcmp函数
1. 描述int strcmp ( const char * str1, const char * str2 );str1>str2=1 ,str1<str2=-1, str1==str2=0.比较对应位置的ACSII码,直接返回,不必拘泥于字符串长度等问题。对指针缺乏安全性检查,空指针程序会崩溃。2.代码展示#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<原创 2020-07-05 00:06:49 · 201 阅读 · 0 评论 -
模拟实现strchr函数
1.描述const char * strchr ( const char * str, int character );char * strchr ( char * str, int character );字符匹配函数,成功返回在str中的地址,失败返回NULL,\0也作为匹配的字符。库函数缺乏安全检查,空指针会崩溃。通过定义字符为Int型,通过比较ascii码来实现传入数据。2.代码展示#include<stdio.h>#include<stdlib.h原创 2020-07-04 22:42:27 · 150 阅读 · 0 评论 -
模拟实现strstr函数
1.描述const char * strstr ( const char * str1, const char * str2 );char * strstr ( char * str1, const char * str2 )作用是判断在str1是否包含str2,是就返回str1中与str2匹配的头指针,失败返回空指针。库函数中没有严格的类型检查,空指针传入会报错。2.代码展示#include<stdio.h>#include<stdlib.h>#include&原创 2020-07-04 21:44:11 · 146 阅读 · 0 评论 -
模拟实现strcat函数
1.描述char * strcat ( char * destination, const char * source )strcat函数是在一个destination后面追加source串,返回值为destination的头指针。这个函数缺乏必要安全检查,空指针会崩溃,同时也不支持后重叠。(重叠会覆盖destination中的\0,导致source也没有\0,出现死循环)2.代码展示#include<stdio.h>#include<stdlib.h>#incl原创 2020-07-04 19:43:06 · 207 阅读 · 0 评论 -
模拟实现strcpy函数
1.描述char * strcpy ( char * destination, const char * source );返回值为char*方便链式表示。dst空间足够大,并且和源地址没有重叠。(如果重叠并且目的端,地址在源地址“后面”,要从后向前赋值,不然会覆盖’\0‘)5. 结尾’\0‘,需要拷贝。2.代码展示#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<原创 2020-07-04 18:49:11 · 240 阅读 · 0 评论 -
结构体、位段(位域)、联合体、枚举类型大小计算及分析
1.结构体void test1(){ typedef struct { int i; }s; typedef struct { char c1;//1 char c2;//1 int i;//4 }s1;//8 typedef struct { char c1;//1 int i;//4 char c2;//1 }s2;//12 typedef struct { char c2;//1 double d;//8 int i;//4 }原创 2020-07-02 15:07:03 · 370 阅读 · 0 评论 -
指针的理解与使用---总结1
1.指针是什么?指针实际是一个变量,只不过这个变量是存的地址,我们通过这个变量可以找到以它为地址的内存单元。2.为什么一字节(byte)是8bit?1bit 就是一个二进制位1byte = 8bit实际上是来源于ASCII码表,需要表示最少128个字符,所以要用8个bit位来表示。地址存放东西的时候也要以字节为最小单位。32位地址中,指针需要4个字节。64位指针为8个字节。3....原创 2020-03-26 12:09:45 · 329 阅读 · 0 评论 -
冒泡排序
1.冒泡排序首先冒泡排序是一种交换排序,通过比较相邻数字的大小,将大或者小的一方,逐次交换到最后或者最前端,本质是一种时间换空间的算法。Bubblesort1首先是未优化的算法例如:5 4 3 2 1我们需要由小到大的排序:一共要比较4+3+2+1 = 10次,交换4 5 3 2 14 3 5 2 14 3 2 5 14 3 2 1 53 4 2 1 53 2 4 1 53...原创 2020-02-19 23:35:23 · 411 阅读 · 0 评论 -
杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
1.杨氏矩阵有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。2.代码展示#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<Stdlib.h>#define COL 3#define ROW 3void Search(int* arr...原创 2020-02-12 23:37:35 · 122 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面
1.调整数组使奇数全部都位于偶数前面。1,4,2,5,6,7,9,21,5,7,9,6,2,4,22.代码展示#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>#include<stdlib.h>void Adjust(int* arr,int len){ int* src = NULL; int* e...原创 2020-02-11 23:58:23 · 121 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student".
1.有一个字符数组的内容为:“student a am i”,请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。2.代码展示#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>void Revers...原创 2020-02-11 19:52:27 · 166 阅读 · 0 评论 -
编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
1.编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)2.代码展示#define _CRT_SECURE_NO_WARNINGS 1int OneNum(int* arr,int len){ int num = 0; for (int i = 0; i < len; i++) { num ^= arr[i]; }...原创 2020-02-10 20:01:01 · 130 阅读 · 0 评论 -
不使用(a + b) / 2这种方式,求两个数的平均值。
1.不使用(a + b) / 2这种方式,求两个数的平均值。例如:a=4 b=6解题思路:方法一:(a+b)/2a+(b-a)/2太大数字计算(a+b)容易溢出方法二:对应的二进制0000 0110 6 a0000 0100 4 b再通过&运算0000 0100 4 b再通过^和右移1位 (a-b)/20000 0010 20000 000...原创 2020-02-10 19:22:37 · 142 阅读 · 0 评论 -
编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值。
1.编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值是value的二进制位模式从左到右翻转后的值。如:在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000程序结果返回:...原创 2020-02-10 16:15:02 · 221 阅读 · 0 评论 -
杨辉三角
1.在屏幕上打印杨辉三角。11 11 2 11 3 3 11 4 6 4 12.代码#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#define row 6#define col 6int main() { int i = 0; int j = 0;...原创 2020-02-10 15:48:32 · 69 阅读 · 0 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个
1、日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。2、代码#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include&...原创 2020-02-10 15:38:02 · 302 阅读 · 0 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
1、5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。2、代码#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#includ...原创 2020-02-10 15:34:31 · 440 阅读 · 0 评论 -
【Fibonacci数列】Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此
1.【Fibonacci数列】Fibonacci数列是这样定义的:F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把 当...原创 2020-02-10 13:51:46 · 1565 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位、输出一个整数的每一位、两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int num = 0; scanf("%d",&num); for (int i = 0; i<32; i+=2) { printf("%d",((num&...原创 2020-02-08 23:49:34 · 115 阅读 · 0 评论 -
求一个整数存储在内存中的二进制中1的个数
1.写一个函数返回参数二进制中 1 的个数一、比如: 15 0000 1111 4 个 1 10 1010程序原型:int count_one_bits(int value){// 返回 1的位数}1.模2看是否余1.要考虑负数的问题,所以在开始就直接将负数转化为无符号整数。int count_bits1(unsigned int input)//求负数应该将数转化为无符号整型...原创 2020-02-08 22:53:30 · 277 阅读 · 0 评论 -
模拟实现strcpy
1.模拟实现strcpy,首先要明白,目标和源。以及实现结束的条件判断,这里我们以\0,另外在循环结束的时候,把\0要拷贝过去。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include<assert.h>void MyStrcpy1(char *dst, ...原创 2020-01-18 00:34:47 · 123 阅读 · 0 评论 -
C语言经典例题(递归非递归斐波那契数,n^k,拆分数字,反向排列,n的阶乘,递归非递归strlen)
1.递归和非递归分别实现求第n个斐波那契数。递归最重要的是写出n-1和n-2项,直到判断停止的位置。非递归需要明确前几项的关系。非递归#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int ch = 0; int a = 1; int b ...原创 2019-10-17 21:28:13 · 243 阅读 · 0 评论 -
C语言三子棋(n子棋)
一、实现的核心。1.菜单功能的提示void menu(){ printf("****************************\n"); printf("****** 1.play 0.exit ******\n"); printf("****************************\n");}2.测试是否能够进行选择进入void test(){ int i...原创 2019-10-13 01:05:18 · 462 阅读 · 0 评论 -
C语言经典例题(自定义函数的方法)
1.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,输入9,输出9 * 9口诀表,输入12,输出12 * 12的乘法口诀表。void mult_table(int num){ int i = 0; int j = 0; int sum = 0; for (i = 0; i < num; i++) { for (j = 0; j <= i; j++) ...原创 2019-10-11 17:56:26 · 5935 阅读 · 0 评论 -
C语言经典例题(猜数字游戏,二分查找,模拟登陆(字符串的比较),判读字符类型并转化输出)
1.完成猜数字游戏。0–100play_game(){ int ret = 0; int guess = 0; ret = rand()%100+1; printf("猜数字开始,请输入0-100之间的数字:\n"); while (1) { scanf("%d", &guess); if (ret == guess) { printf("恭喜你猜对了\...原创 2019-10-08 17:44:24 · 270 阅读 · 0 评论 -
C语言经典例题(输出任意菱形,求出0~999之间的所有“水仙花数”并输出,求任意数字末尾含M个a的前N项和)
#1.在屏幕上输出任意大小的菱形图案。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main() { int line = 0; scanf("%d", &line); int i = 0; for (i = 0; i < line; i++) {...原创 2019-10-01 21:59:37 · 205 阅读 · 0 评论 -
C语言经典例题(数组交换,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,编写程序数一下 1到 100 的所有整数中出现多少次数字9。)
将数组A中的内容和数组B中的内容进行交换。(数组一样大)这里设置一个临时变量用来交换,后面通过一个循环输出。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int arr1[] = { 1,2,3,4,5 }; int arr2[] = { 6...原创 2019-09-29 21:06:11 · 1012 阅读 · 0 评论 -
C语言经典例题(9*9乘法表,100-200素数,闰年)
9*9乘法表这里最主要的就是两个循环,动手写一下计算过程就能编写出来#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main(){ int i, j; for (i = 1; i <= 9; i++) { for (j = 1;j <= i; j++) { printf("%d*%d=...原创 2019-09-19 23:34:11 · 209 阅读 · 0 评论 -
C语言经典例题(两个数交换,三个数比大小,求最大公约数)
1.给定两个整形变量的值,将两个值的内容进行交换。(1)、定义一个临时变量,实现交换。#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main(){ int i, j, k; scanf("%d %d", &i, &j); printf("交换前 :i = %d,j = %d", i, j);...原创 2019-09-18 00:38:20 · 1189 阅读 · 0 评论 -
【C++学习笔记】----C++类型转换(static_cast、reinterpret_cast、const_cast、dynamic_cast)
1.C语言类型转换主要代码void test_c(){ //隐式类型转换 int i = 1; double d = i; printf("i = %d ,d = %.2f\n", i, d); //显式类型转换 int *p = &i; int address =(int)p; printf("p = %p , address = %d\n", p, address);}隐式类型转换可能会出现精度丢失的情况,是有编译器完成显式类型转换是强转得到,代码不够清晰原创 2020-08-21 00:29:59 · 132 阅读 · 0 评论 -
【C++学习笔记】----特殊类设计、单例模式(饿汉模式,懒汉模式)
1.只能在堆上创建对象1.代码//1.只能在堆上创建的对象class HeapOnly{public: static HeapOnly* CreateObject() { return new HeapOnly; } private: HeapOnly(){} //C++98 只声明不实现 //HeapOnly(const HeapOnly&);public: //C++11 delete HeapOnly(const HeapOnly&) = dele原创 2020-08-14 17:14:53 · 184 阅读 · 0 评论 -
【C++学习笔记】----详解异常(异常体系、异常安全问题、异常规范)
1.代码展示#define _CRT_SECURE_NO_WARNINGS 1//锁守卫(RAII)//异常#include<string>#include<iostream>using namespace std;double Div(){ int a, b; cin >> a >> b; if (b == 0) throw string("除0错误");//抛出的是临时对象 return (double)a / (double原创 2020-08-08 12:30:10 · 254 阅读 · 0 评论 -
【C++学习笔记】----智能指针(auto_ptr、unique_ptr、shared_ptr、weak_ptr、定制删除器)
1.代码展示#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<thread>#include<mutex>using namespace std;namespace xff{ template<class T> class Smartptr { public: Smartptr(T* ptr) :_ptr(ptr) , _pcount(new int(1原创 2020-08-06 18:10:29 · 164 阅读 · 0 评论 -
【C++学习笔记】----模板进阶(详解非类型参数、模板特化、分离编译)
1.非类型参数代码展示//非类型参数template<class T, size_t N = 10>class Array{public:private: T _a[N];};void test1(){ Array<int> a1;//10 Array<int,100> a2;//100}结果展示总结非类型参数不能是字符串、类对象,或浮点型例如用宏来定义长度的话,需要引入多个宏才能定义出多个不同大小的数组参数必须原创 2020-08-05 19:25:58 · 206 阅读 · 0 评论 -
【C++学习笔记】----模拟实现栈和队列以及双端队列的分析
1.描述队列&栈队列先进先出,栈后进先出队列、栈的底层都是通过容器适配,双端队列实现的队列、栈由于自身的性质都不支持随机访问双端队列优点:双端队列支持随机访问,增容不需要复制原有空间,直接新开辟空间后增加中控映射头插,头删不移动数据,比vector友好底层是内存块,空间连续,避免空间碎片,比List友好支持迭代器和[ ]访问缺点:deque迭代器是特殊的智能指针,而不是一般指针,它需要在不同的区块之间跳转。遍历的时候需要通过指针去访问每一个内存块,效率比原创 2020-08-05 00:37:03 · 283 阅读 · 0 评论 -
【C++学习笔记】----模拟实现优先级队列
1.描述1.优先级队列底层是一个堆。2.通过仿函数实现控制升序或者降序,默认升序。2.代码展示#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<vector>using namespace std;namespace xff{ template<class T,class Container = vector<T>,class compare = Less<T>原创 2020-08-04 23:18:56 · 139 阅读 · 0 评论 -
【C++学习笔记】----模拟实现List(常见接口,优缺点分析)
1.简介list逻辑上是线性的,物理上是离散存储的。list迭代器失效,删除的时候当前迭代器失效(访问失效的迭代器才会崩溃),迭代器返回的是下一个结点的位置。插入不会导致迭代器失效,插入的时候,当前节点还存在,可以正常访问。2.代码展示#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>//#include<functional>//greater<T>()降序,less<T>()升序#in原创 2020-07-07 18:41:15 · 197 阅读 · 0 评论 -
【C++学习笔记】----模板初阶(函数模板、类模板)
1.代码展示#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;//函数模板int add(int x, int y){ return x + y;}template<typename T>T add(const T& x,const T& y){ return x + y;}void test1(){ int ret = 0; int a1 =原创 2020-06-29 00:51:33 · 169 阅读 · 0 评论