![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c or c++
文章平均质量分 60
辰星~
这个作者很懒,什么都没留下…
展开
-
C/C++内存管理详解以及内存泄露的检测
文章目录前言一、C/C++内存分布?内存存放的数据类型二、C/C++内存管理1.C内存管理2.C++内存管理总结前言这篇博客主要介绍一些C/C++的内存管理机制,包括C/C++内存分布、申请释放内存方式及底层实现的简单解释、内存泄漏、内存泄漏的检测、如何防止内存泄漏,若有错误之处还请指正。一、C/C++内存分布?## 1.内存布局示意图:内存存放的数据类型栈:非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库..原创 2020-10-24 19:59:17 · 396 阅读 · 0 评论 -
C++智能指针使用和详解
智能指针即将资源交给一个对象来管理,在其生命周期内资源一直可用,对象生命周期结束后会自动调用析构释放资源。C++ STL智能指针主要包括auto_ptr、unique_ptr、unique_ptr、shared_ptr、weak_ptr在这里插入代码片...原创 2020-10-24 15:10:54 · 365 阅读 · 0 评论 -
c++模拟实现string类
//注意,实现string类时,在拷贝,赋值等操作时要深拷贝#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string.h>#include<algorithm>#include<assert.h>using namespace std;namespace ming ...原创 2019-12-09 17:47:58 · 88 阅读 · 0 评论 -
linux进程相关的一些概念
理解进程之前要知道的一些知识冯诺依曼体系结构1:输入数据和程序的输入设备;2:记忆程序和数据的存储器;3:完成数据加工处理的运算器;4:控制程序执行的控制器;5:输出处理结果的输出设备。操作系统任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。即操作系统包括内核(进程管理,内存管理,文件管理,驱动管理)其他程序(例如函数库,shell程序等等)操作系统也可以理...原创 2019-12-08 18:57:18 · 74 阅读 · 0 评论 -
string类基本操作介绍
标准库中的string类字符串是代表字符序列的对象。标准字符串类通过类似于标准字节容器的接口为此类对象提供支持,但增加了专门设计用于单字节字符字符串的功能。该字符串类是的一个实例的basic_string类模板使用字符(即字节)作为其性格类型,其默认char_traits和分配器类型(见basic_string的更多信息的模板)。请注意,此类处理字节独立于所使用的编码:如果用于处理多字节或...原创 2019-11-15 16:12:20 · 307 阅读 · 0 评论 -
类和对象上篇
c语言是一门面向过程的语言,随着计算机语言的发展面向对象编程变得尤为重要,面向对象语言也变得尤为重要,因此c++诞生了,面向对象语言也使得计算机语言进步了许多,那么什么是面向对象编程了?面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要...原创 2019-11-03 18:27:14 · 83 阅读 · 0 评论 -
Date类
日期类#pragma once#include<iostream>using namespace std;class Date {public: //将输入输出重载函数定义为友元函数,该函数才能访问该类的成员及数据 friend ostream& operator<<(ostream& _cout, const Date& d...原创 2019-10-30 20:46:45 · 98 阅读 · 0 评论 -
类和对象及成员函数中篇
c++类的中的空类什么都没有么?不是的,一般一个空类中编译器会自动帮我们生成6个成员函数,这6个成员函数分别为构造函数,析构函数,拷贝构造函数,赋值操作符重载函数,const成员,取地址及const取地址操作符重载。那么它们分别具有什么功能了?如下一一介绍构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在...原创 2019-10-26 16:46:53 · 519 阅读 · 0 评论 -
c++11新加入的常用功能
1 auto关键字在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有 人去使用它。C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得,即可理解为一个类型占位符。int TestAuto() { return ...原创 2019-10-23 20:57:41 · 274 阅读 · 0 评论 -
一些简单的c++入门知识
1 命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。即命名空间可以限定标识符名称的作用域,有时如果标识符名称相同,但只要合理利用namespace就可以限定该变量或函数或类名的作用域,这样就不会引起冲突...原创 2019-10-23 20:16:33 · 68 阅读 · 0 评论 -
堆的实现(包含堆排序)
堆分为大堆和小堆,在这里实现的为大堆形如下图的即为大堆(所有的父节点大于其两个子节点),反之则为小堆//头文件#include<stdio.h>#include<assert.h>#include<malloc.h>typedef int HPDataType;typedef struct Heap { HPDataType* _a; ...原创 2019-10-16 21:48:16 · 85 阅读 · 0 评论 -
循环队列的实现
循环队列:一种特殊的队列,即它的队尾指向队头,为循环结构//头文件#include<stdio.h>#include<malloc.h>#include<assert.h>typedef int QUDataType;typedef struct QueueNode { struct QueueNode* _next; QUDataType _d...原创 2019-10-16 21:23:26 · 191 阅读 · 0 评论 -
队的实现
队:一种头删尾插的数据结构//头文件#include<stdio.h>#include<malloc.h>#include<assert.h>typedef int QUDataType;typedef struct QueueNode { struct QueueNode* _next; QUDataType _data; }Que...原创 2019-10-16 21:17:04 · 221 阅读 · 0 评论 -
栈的实现
栈的实现栈:只能在栈顶插入,栈顶删除的一种数据结构,后进先出栈是一种很重要的数据结构,尤其当实现某种功能时用到了递归,但有时递归调用过多会导致栈(此栈为计算机内存的栈,非数据结构的栈)溢出,或者效率太低,这时就可利用栈和循环模拟递归实现该功能,从而解决上述问题.//该栈还有待优化//头文件#define _CRT_SECURE_NO_WARNINGS#define _warn_unus...原创 2019-10-16 21:10:35 · 77 阅读 · 0 评论 -
给定基准重新排列链表数据
LeetCode练习题,比基准值小的放其前面,否则放后面,且原链表的结点位置关系不变,如 8 2 5 1 6 3 4 9 10,给定基准值7则结果为 2 5 1 6 3 4 8 9 10//创建两个链表,一个放比基准值小的,一个放大的,之后再将两链表链接起来即可//给定基准重新排列链表数据/*struct ListNode { int val; struct Lis...原创 2019-10-16 20:20:16 · 77 阅读 · 0 评论 -
单链表中删除所有等于x的结点
这里只贴了函数,该函数依赖于上一篇博文单链表及单链表基本操作的实现//删除所有等于x的结点void SingleListRemoveall(SingleList* sl, DataType x) { assert(sl); SingleListNode* cur = sl->_head; SingleListNode* prev = NULL; SingleListNode* t...原创 2019-10-13 10:39:07 · 660 阅读 · 0 评论 -
单链表及单链表的基本操作实现
头文件typedef int DataType;//单链表节点typedef struct SingleListNode{ DataType _data; struct SingleListNode* _next;} SingleListNode;typedef struct SingleList{ SingleListNode* _head;} SingleList;...原创 2019-10-13 10:24:36 · 112 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC思路:测出从键盘接收的字符串的长度,每次对第一个字符串左移一位,每左移一位与第二个字符串进行比较,若相等则记下并跳出循环;若不...原创 2019-08-17 15:48:00 · 112 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面。
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:建立两个指针(start,end)分别指向数组的第一个元素和最后一个元素.1判断指向首地址的元素是不是奇数(模2),若是则指针后移,若不是则跳出循环;2之后再判断指向末地址的是不是偶数,若是则指针后移,若不是则跳出循环;3交换两个指针所指向的元素,即奇数放...原创 2019-08-17 17:17:25 · 143 阅读 · 0 评论 -
//杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
//杨氏矩阵如:1 2 32 3 43 4 5有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);思路:因行列的元素都是按照升序排列的,所以在找数字时只需在行列之前加上判断条件即可缩短时间复杂度,若此数小于每行或每列的第一个数则直接跳出这一行或这一列,然后进入下一行或列,直到找到该数//杨氏矩阵找数字...原创 2019-08-17 17:25:35 · 216 阅读 · 0 评论 -
实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB#define _CRT_SECURE_NO_WARNINGS //scanf宏定义#include<stdio.h>#include<string.h>//左移函数char leftChar(char a[], int length, int k) ...原创 2019-08-17 15:34:27 · 111 阅读 · 0 评论 -
指针的一些用法及题目(未完待续)
字符指针数组指针指针数组函数指针函数指针数组容易混淆的一些指针习题字符指针char* a="abcde"; //指针a保存的是字符串首元素的地址,而不是字符串的地址; //注意这里是不能对 // 指针指向的内容...原创 2019-08-21 18:30:51 · 132 阅读 · 0 评论 -
模拟实现strcpy
利用指针可直接进行操作#include<stdio.h>#include<string.h>char strcpy1(char* a,const char* b) { char* c = a; while (*b !='\0') { *a= *b; a++; b++; } *a = *b;}int main() { char a[10] = ...原创 2019-08-16 16:28:29 · 55 阅读 · 0 评论 -
递归实现买汽水,汽水1元一瓶,2个空瓶可换一瓶汽水
例如:20元,可买38瓶汽水,38=20+10+5+2+1一元可买一瓶汽水,即两个空瓶价值一元,所以应该以买汽水的钱(money)作为递归的变化条件,函数参数money每次除以二,递归结束条件money==1时#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>buyWater(int money,int count) { if (...原创 2019-08-16 16:26:14 · 1973 阅读 · 0 评论 -
c语言自定义类型:结构体,位段,枚举,联合
结构体结构体类型的创建(声明)struct student{char name[1024];int age;}; //分号必须有结构体是否可以自引用了?这样对么?struct student{char name[1024];int age;struct student node;};答:这样是不对的,如果这样则结构体所占字节数就无法确定了.正确自引用应该...原创 2019-08-28 16:27:48 · 224 阅读 · 0 评论 -
模拟实现strcat
strcat的功能:将两个字符串进行连接实现思路:将第二个字符串连接到第一个字符串之后,要求第一个字符数组长度足够大.第一个指针向后移指向字符串末尾即’\0’,第二个指针指向第二个数组的头元素,之后进行赋值直到’\0’,最后将第二个数组的’\0’赋给第一个数组的最后元素作为结束标志.#include<stdio.h>char strcat1(char* a[20], char*...原创 2019-08-16 16:17:00 · 92 阅读 · 0 评论 -
实现strcpy
//实现strcpy#include<stdio.h>#include<stdlib.h>char* Strcpy(char* dest, const char* src) { if (dest == NULL || src == NULL) { //合法性校验 return dest; } while(*dest!='\0'){ ...原创 2019-08-26 16:45:44 · 76 阅读 · 0 评论 -
实现strcat
strcat:字符串连接函数如:a[100]=“abcd”,b[]=“efgh”,调用strcat(a,b),a[100]变为a[]=“abcdefgh”//实现strcat#include<stdio.h>#include<stdlib.h>char* Strcat(char* dest, const char* src) { if (dest == NULL...原创 2019-08-26 16:51:31 · 126 阅读 · 0 评论 -
第二篇
给定两个整形变量的值,将两个值的内容进行交换。#include<stdio.h>int main(){int m,n,t;scanf("%d,%d",&m,&n);t=m;m=n;n=t;printf(“交换后m=%d,n=%d\n”,m,n);return 0; }2 不允许创建临时变量,交换两个数的内容(附加题)#include<s...原创 2019-06-22 23:33:07 · 77 阅读 · 0 评论 -
简单的静态通讯录
//实现一个通讯录;//通讯录可以用来存储1000个人的信息,每个人的信息包括://姓名、性别、年龄、电话、住址//提供方法://1. 添加联系人信息 已完成//2. 删除指定联系人信息 已完成//3. 查找指定联系人信息 已完成//4. 修改指定联系人信息 已完成//5. 显示所有联系人信息 已完成//6. 清空所有联系人 已完成//7. 以名字排...原创 2019-09-14 18:44:06 · 93 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student". 要求: 不能使用库函数。 只能开辟有限个空间(空间个数和字符串的长度无关)。
有一个字符数组的内容为:“student a am i”,请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。student a am i第一步:创建逆置函数将整个字符串逆置 i ma a tneduts第二步:切分字符串,将空格改为’\0’ i\0ma\0a\...原创 2019-08-28 14:44:34 · 79 阅读 · 0 评论 -
关于位操作符的一些题目
写一个函数返回参数二进制中 1 的个数比如: 15 0000 1111 4 个 1#include<stdio.h>#include<stdlib.h>int One_Number(int n) { int count = 0; for (int i = 0; i <sizeof(int)*8; i++) { //按位与,只有两个都为1结果才为1 ...原创 2019-08-28 14:31:10 · 122 阅读 · 0 评论 -
实现memcpy和memmove
memcpy:内存复制函数,可对各种各样的数据进行复制实现思路:每次只复制一个字节即可memmove:功能与memcpy类似,但是这个函数可以处理内存覆盖的情况,而memcpy则不可以.例如memcpy(arr+1,arr,size)不能正确处理,但是memmove(arr+1,arr)则可以//memcpy#include<stdio.h>#include<stdl...原创 2019-08-26 18:11:55 · 91 阅读 · 0 评论 -
实现strcmp
sttrcmp:字符串比较函数,按照ASCII码表进行比较相等返回0小于返回负数大于返回正数include<stdio.h>#include<stdlib.h>int Strcmp(const char* a, const char* b) { if (*a == NULL || *b == NULL) { return NULL; } //若相等则指...原创 2019-08-26 17:55:39 · 245 阅读 · 0 评论 -
实现strchr
#include<stdio.h>#include<stdlib.h>char* Strchr(const char* a, const char c) { if (*a == NULL|| c == NULL) { return NULL; } //不相等则后移,相等则跳出,遍历完成也跳出 while (*a != c&&*a!='\0')...原创 2019-08-26 17:48:14 · 116 阅读 · 0 评论 -
实现strstr
strstr函数功能:判断一个字符串是否是另一个字符串的子串例如:hello woworld 和 world,第二个是第一个的子串思路:创建指针指向两个字符串进行遍历并比较,直到任何一个指针指向了’\0’;若字符不同则只移动父串的指针,若相同则同时移动并继续比较;若子串指针指向了’\0’说明包含;//实现strstr#include<stdio.h>#include&...原创 2019-08-26 17:42:04 · 85 阅读 · 0 评论 -
一个数组中只有两个数字是只出现一次,找出这两个数字
例如:13579135这两个数字即为7 9#include<stdio.h>void findOne(int arr[8], int length) { int count = 0, b = arr[0]; for (int i = 0; i < length; i++) { count = 0; b = arr[i]; for (int j = 0; j ...原创 2019-08-16 16:07:35 · 95 阅读 · 0 评论 -
打印任一行杨辉三角
杨辉三角特点:第一列全为1,行列号相同全为1,某个元素是其上一行同一列元素和前一列元素之和,建立二维数组依据特点建立约束条件即可打印//在屏幕上打印任意行杨辉三角。//1//1 1//1 2 1//1 3 3 1#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void ya...原创 2019-08-20 17:05:09 · 298 阅读 · 0 评论 -
编写一个程序,可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符,就输出对应的小写字符, 如果是数字不输出。
//利用ASCII码进行转换#include<stdio.h>int main(){ int ch; while (1) { printf("请输入一个字符\n"); ch = getchar(); if (ch >= 'a' && ch <= 'z') { printf("%c\n", ch - 32); break;...原创 2019-06-29 23:22:53 · 125 阅读 · 0 评论 -
.编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序。
.编写代码模拟三次密码输入的场景。最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>int main() { char a[7] = {"a1b2c3"}, b[7] ...原创 2019-06-29 23:00:52 · 302 阅读 · 0 评论