C++学
爱编程的小屁孩
这个作者很懒,什么都没留下…
展开
-
结构体大小
结构体大小只要记住以下三点即可:1.结构体每个成员变量的相对首地址必须是该变量长度的整数倍;2.结构体总大小必须为最大成员长度的整数倍;3.union长度为最大成员变量的长度;例题:下面结构体struct s1{ char ch,*ptr; union{ short a,b; unsigned int c:2,d:1; } struct s1*next;}的大小为...原创 2020-03-02 10:28:02 · 807 阅读 · 0 评论 -
类模板实现基于数组的栈
一、学习要点:1.类模板和模板类的区别,模板类这里的模板可以看成一个动词,对抽象类的一个实例化;2.函数模板的声明和定义;3.基于数组栈的实现,进栈和出栈的差别,进栈【++top】,出栈【top–】;容易搞混,可这样记忆,出栈之前,肯定把值拷贝出去,然后栈顶减一,于是乎出栈【top–】,进栈和出栈对称,即为【++top】.二、代码:三、程序运行结果:...原创 2019-01-07 22:47:05 · 257 阅读 · 0 评论 -
C++之变量的作用域,生存期,可见性
作用域是表示某个标识符在什么范围内有效;可见性是指标识符是否可见,可引用;生存期,是指程序中的简单变量和类的对象,它们同自然界中的万物一样。也有自己的产生和消亡的生存期,变量和对象的生存期包含静态生存期和动态生存期。具有静态生存期的变量和对象,它们的生存期和程序运行相同;除了具有静态生存期的变量和对象,其余的变量和对象则具有动态生存期。具有动态生存期的变量和对象,它们处于被声明处产生,于自身的...原创 2019-01-06 21:38:02 · 1331 阅读 · 0 评论 -
C++类的基本学习知识
面对对象:将系统看成对象的集合,对象之间通过交互作用来完成系统特定功能;面对对象编程的特点:继承、封装、多态;进入主题:1.类的声明class 类名称{public: 公有成员(外部接口,允许来自类外的访问)private:私有成员(只允许本类的函数访问,类外部的任何函数不能访问)protected:保护成员(与private类似,差别表现在继承与派生)}2.成员函数de...原创 2019-01-06 20:28:07 · 210 阅读 · 0 评论 -
友元函数和友元类
https://blog.csdn.net/jackystudio/article/details/11799777转载 2019-01-05 20:57:44 · 483 阅读 · 0 评论 -
快速排序的C++实现(利用二分分治法)
一、学习要点:1.先从数列中选取一个数作为基准数。2.利用区分过程,为这个数确定在排序后数组的位置,区分过程为,比这个数大的数全放到他的右边,小于或等于这个数的数放到他的左边;3.在对左右区间重复第二步,知道个区间只有一个数。4.如果这个数组有10个数,第二步将执行十次,每次的复杂度为logn,总复杂度为O(nlogn),因为每执行一次区间排序可为数组中一个元素确定该元素在排序后的位置;...原创 2018-12-29 23:00:29 · 856 阅读 · 0 评论 -
C++递归求数组最大值、平均值、求和
一、学习要点1.相同类型的对象的复制是通过拷贝构造器;2.初始化成员列表的具体表达方式,第一个是冒号,剩下的都是逗号。3.强制类型转变,(float);二、程序代码:1.有关拷贝构造器的:#include<iostream>using namespace std;class CExample{private: int a;public: CExample(int...原创 2019-01-03 21:52:40 · 5396 阅读 · 0 评论 -
ubuntu下KDvelop中怎么显示行号
ubuntu下KDvelop中怎么显示行号:亲测好使:为节省时间只做资源的搬运工https://blog.csdn.net/weixin_42927959/article/category/7923477转载 2018-11-14 14:58:28 · 256 阅读 · 0 评论 -
int main(argc,*argv)中argc,argv的相关说明
说的特别清楚明白,适用于代参的程序运行;https://www.cnblogs.com/linshui91/archive/2010/09/29/1838762.html转载 2018-11-13 22:22:27 · 880 阅读 · 0 评论 -
C++中auto的用法,说明的是变量的寿命
C语言提供了存储说明符auto,register,extern,static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期,其中auto和register的存储期为 自动存储期,具有自动存储期的变量在进入声明该变量的程序块是被建立,它在该程序块活动是存在,退出该程序块时撤销。...原创 2018-10-17 18:59:47 · 482 阅读 · 0 评论 -
友元类的理解
友元类的理解加实例:https://blog.csdn.net/lzw66666/article/details/79951676转载 2019-03-21 09:02:14 · 163 阅读 · 0 评论 -
C语言中编译、生成、调试、运行的区别
1.编译:依赖于编译器,英文是compile,vc中这一过程是将源码转化成目标文件,如.obj文件,rc文件等。2.生成:指的是链接过程,英文是build.依赖于链接器。vc中在这一阶段将所有的目标文件和所有需要用到的组建组合成一个整体。3.调试:让程序在系统中运行之前的查错和改错;让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在的问题;4.运行:就是让程序在系统中运行;...原创 2019-02-24 09:46:42 · 10634 阅读 · 0 评论 -
C++const类型的引用参数
C++const类型的引用参数:具体作用,假设实参的参数类型与引用参数不匹配,但可以转换为引用类型,程序将创建一个正常类型的临时变量,使用转化后的实参值来初始化它,然后传递一个指向该临时变量的引用。讲的比较好的一个博客:https://www.cnblogs.com/a-lai/p/7338316.html...转载 2019-06-12 20:57:36 · 1755 阅读 · 0 评论 -
多线程、多进程、互斥锁
因为一个进程内的线程共享一个页目录项,所以不同的线程运行在不同的核上的时候,读取同一个虚拟地址时,对应的物理地址是一致的,所以可能产生冲突!所以所谓的各种模型,加的锁应该就是为了解决这些问题吧多进程就没这种问题,但是不同进程数据共享就很麻烦了,因为每个进程有自己的页目录项,即使虚拟地址一样,映射的物理内存也是可能不一样的。...原创 2019-07-15 15:50:25 · 540 阅读 · 0 评论 -
并发与并行的区别
迄今为止,看到的最好解释:1.你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。2.你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发;3.你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。并发的关键,你有处理多个任务的能力,不一定要同时。并行的关键,你有同时处理多个任务的能力。所以,我认为他们最关键的点就...原创 2019-07-15 15:26:01 · 254 阅读 · 0 评论 -
插入法排序
一、学习要点:1.直接插入的核心思想:将给定数组看成是有序表和无序表组成;开始时有序表只有1个元素,无序表包含n-1个元素,排序过程是每次从无序数组中抽取一个元素,把它插到有序数组中的适当位置,最后形成新的有序表;2.首先找到应该插入的位置,插入位置之后的所有元素向后移位,移位之前要插入数据及时保存;3.为防止移位后的数据覆盖问题,要移位的所有元素从最后移位开始;二、代码:#includ...原创 2019-06-30 20:18:00 · 1860 阅读 · 0 评论 -
堆排序(heap_sort)
一、学习要点:1.什么是堆?a.完全二叉树;b.子树满足根节点数值小于左右子节点数值,为最小堆;满足根节点数值大于左右子节点数值,为最大堆;2.怎么维护堆的结构:a.每一个子树都应该维护堆结构;b.自下而上维护堆的结构;【(5,6,3,7,8)至上而下的维护,不能将最大的值放到最前头;】3.堆排序:不断的构建完整的堆结构;将最大的元素arr[0]与arr[size-1]进行交换;对...原创 2019-07-03 18:46:40 · 500 阅读 · 0 评论 -
C语言中atoi()函数的用法
C语言中atoi()函数的用法一、学习要点:1.int atoi(const char *str)把参数str所指向的字符串转换为一个整数;二、代码#include<stdio.h>#include<stdlib.h>#include<string>int main(){ int val; char str[20]; strcp(str,"...转载 2019-06-22 21:02:23 · 11204 阅读 · 0 评论 -
快速排序(quick sort)
一、学习要点:1.利用递归分治的思想;2.利用挖坑的思想,调整数组左边的元素一直小于某一个数,数组右边的数一直大于某一个数;3.详细原理说明:https://blog.csdn.net/MoreWindows/article/details/6684558二、代码#include<stdlib.h>#include<iostream>sing namespa...原创 2019-07-01 17:22:19 · 202 阅读 · 0 评论 -
手撕希尔排序
一、学习要点:1.核心思想插入排序对小而有序的数组具有很快的排序效率;2.对数组进行不断分组排序,充分利用插入排序的优势;二、代码实现:#include<stdlib.h>#include<iostream>using namespace std;void shell_sort(int a[],int n){ int gap=n/2,i,j,k; for...原创 2019-07-01 15:53:17 · 194 阅读 · 0 评论 -
哈希表的C语言实现
一、学习要点:1.哈希表是一个很神奇的东西,即解决了数组的增删的繁琐,也解决了链表的查找问题;2.哈希表的哈希函数;3.哈希表的冲突问题解决;什么叫做闭散列,什么叫做开散列;闭,严重遵守哈希内涵。开,有点开放的意味,解决冲突靠链表,有点变味的哈希;二、相关数据结构解读:...原创 2019-06-16 22:47:28 · 8459 阅读 · 3 评论 -
C++之单链表
一、学习要点:1.模板函数、模板类的应用;2.尾节点的指针内容为空,有利于计算链表长度,和插入和删除节点是否越界;3.加深对成员变量应用的认识.二、程序运行代码:#include<stdlib.h>#include<iostream>using namespace std;template<class DataType>struct Node{...原创 2018-10-07 21:23:48 · 197 阅读 · 0 评论 -
程序设计中的驼峰原则
程序设计中的驼峰原则是程序中的变量和函数名的命名原则,比如变量username要写作userName或者UserName规则:变量名或函数名的每一个单词的首字母要大写,第一个单词的字母可大写或者小写效果:这样一个变量或者函数名看起来就像驼峰一样起起伏伏,可以提高代码的可读性。...原创 2018-10-07 15:52:42 · 4079 阅读 · 0 评论 -
C++for循环中i++与++i的区别
i++,是i先赋值后自增; ++i,是i先自增后赋值; 如果只是一条单独语句,没区别,因为没有赋值对象;只有自增; 如果是存在赋值对象,比如n=++i和n=i++就不同; 比如i=9;执行n=++i,i先自增,然后赋值,n=10; 同样i=9;执行n=i++,i先赋值,然后自增,n=9;...原创 2018-09-13 20:57:23 · 8732 阅读 · 0 评论 -
C++之操作符重载和运算符重载
一、学习要点: 1.类中定义的构造器可以必须在类中声明,但定义可以在类内和类外. 2.插入器和吸取器的构造类型必须输入参数和输出参数都含有对象,这样可以不断保证右插. 3.而且输入输出中都含有流的引用,因为流靠的系统托管, 4.输入的参数为什么也为对象的引用,因为类对象占用内存较大,引用传递时,无需在栈内存中开辟空间以装载临时对象,也省去了复制的耗时过程,为了避免改变形参的内容,还需配以c...原创 2018-09-13 16:14:00 · 577 阅读 · 0 评论 -
C++中逆向迭代器的说明及使用
说明及代码: https://blog.csdn.net/fyf18845165207/article/details/82730208原创 2018-09-16 21:59:17 · 377 阅读 · 0 评论 -
C++中transform的用法
直接上代码:void f7(){ string s1="AAAbbb"; transform(s1.begin(),s1.end(),s1.begin(),toupper); cout<<"全部转化为大写:"<<s1<<endl; transform(s1.begin(),s1.end(),s1.begin(),tolow...原创 2018-09-16 21:28:19 · 5426 阅读 · 1 评论 -
C++中erase的用法
erase一共三种用法: 1.erase(pos,n); 删除从下标pos开始的n个字符,比如erase(0,1)就是删除第一个字符 2.erase(position); 删除postion处的一个字符(position是一个string类型的迭代器) 3.erase(first,last) 删除从first到last之间的字符(first和last都是迭代器)...原创 2018-09-16 21:16:41 · 67626 阅读 · 3 评论 -
C++中对String的各种操作
1.string的各种动态、静态赋值//静态string s1=("abckd");string s2("bbbbb");string s3(s1);string s4=s2;//动态string s5;cin&gt;&gt;s5;2.sting的遍历string s="xiaojaiyu";string::iterator iter原创 2018-09-16 21:11:24 · 10635 阅读 · 1 评论 -
C++中strcpy函数的用法
1.函数原型 char *strcpy(char *dest,const char *src) 2.从src地址开始且含有null结束符的字符串复制到以dest地址开始的字符串中,并返回指向dest的指针。通俗的讲就是将 src字符数组复制到dest数组中,如果dest数组本身有数据,会把src里的数据全部复制到dest中,如果dest中有数据小于src地址长度的将会被覆盖,而大于src长度的将...原创 2018-09-16 20:23:48 · 40723 阅读 · 3 评论 -
C++中c_str的用法
一、学习要点: 1.c_str是一个内容为字符串指向字符数组的临时指针; 2.c_str返回的是一个可读不可改的常指针;//const char* c; //①//char* c; //②//char c[20]; char* c=new char[20];string s="1234";//c = s.c_str(); strcpy(c,s.c_str());...原创 2018-09-16 20:13:55 · 1471 阅读 · 1 评论 -
C++中STL和容器、迭代器、算法之间的关系
自学习C++以来,一直对STL、容器、迭代器、算法甚是困惑。 参考一些资料,加上自己的理解,整理如下 如果说程序等于数据结构+算法,STL就是一个小程序库,之所以说小,是因为容器模板中常用的函数有限,其中一个个容器就是一种数据结构.算法通过迭代器对容器中的数据进行访问,即形成一个个小程序。 在使用容器之前首先要根据自己使用的数据集和将要对数据结构采取的访问模式,比如增删改查,决定使用STL中...原创 2018-09-13 22:26:48 · 3435 阅读 · 0 评论 -
C++中的虚继承
举例来说,如果类A和类B同时继承类C(一般继承),类D又同时继承类A和类B,那么类D就会拥有两套和类C相关的成员(可分别独立访问),但如果类A虚继承类C,那么类D中就会只有一组包含类C的成员数据。 代码:class A;class B:public virtual A;//定义成虚继承class C:public virtual A;//定义成虚继承class D:public B...原创 2018-09-14 09:47:53 · 133 阅读 · 0 评论 -
C语言之单链表
一、学习要点:1.指针在使用的时候一定要初始化;初始化原因不明白见我博客:https://blog.csdn.net/fyf18845165207/article/details/829542282.注意动态分配和释放内存的函数malloc和delete;二、程序代码:#include<stdlib.h>#include<stdio.h>#include&l...原创 2018-10-06 21:50:03 · 200 阅读 · 0 评论 -
C语言中指针定义的时候初始化的必要性
定义一个指针时,不进行初始化,系统会为这个变量自动分配一个地址,这个地址的值就是指针的值可能为0X1234,不初始化这个指针的值的话,操作这个指针就想当于操作这个0X1234这个地方的内容,就会出现问题,因为你并不知道这个指针指向地址的内容,可能为段系统代码,错改的话,可能会让系统崩溃。比如 int *p;*p=100;让p这个指针指向地址的值为100,有可能这个指针指向地址的值为系统的一个重...原创 2018-10-06 21:31:42 · 3918 阅读 · 0 评论 -
C++之"stdafx.h"的用法说明
1.全称:Standard Application Fram Extend,所谓的头文件预编译2.用法:在一个工程中,如果每一个cpp文件中有一些标准的头文件,只需在一个cpp中include这些头文件,然后在其他cpp文件中,用#include"stdafx.h"告诉编译器,这个地方的头文件不用在编译,使用预编译的结果,所谓预编译的结果就是含有完整标准头文件cpp已经编译的头文件结果....原创 2018-09-22 21:52:57 · 2974 阅读 · 0 评论 -
C++之链队列
一、学习要点:1.链队列的实现不用限制队列的长度;当删除元素时,只需要改变头结点指向的首元结点(phead->next=phead->next->next),插入只改变尾节点的(pnode为新插入结点,pend->next=pnode;pend=pnode,即可)2.头结点,首元结点,尾节点有不明白的可参考我的上一篇博客。3.总体来说,链队列的实现比数组队列的实现要方...原创 2018-09-21 22:41:51 · 452 阅读 · 1 评论 -
C++结构体和类的区别
1.结构体中可以存在构造器,在C++中结构体是一种特殊的类,可以存在成员函数。与联合体有所区别。具体可参看我的另一篇博客,C++之链队列;2.结构体中的默认数据为public,而类的默认数据为private所有类具有封闭性。如果看懂,感觉不错,请点赞。...原创 2018-09-21 18:38:37 · 117 阅读 · 0 评论 -
C++之链表中头指针、头节点、首元结点的
头指针:顾名思义是一个指针,指向链表的开始地址;头结点:第一个节点,该节点只有地址信息,改地址指向下一个结点,数据域无信息;首元结点:含第一个元素的结点,为链表的实际开始位置,数据域包含第一个数据信息,指针指向下一个结点。为什么设有头结点,为的是插入删除方便,每次删除,只需phead->next=phead->next->next;若无头结点,删除的话,不好处理。若还是不...原创 2018-09-21 18:27:04 · 3052 阅读 · 0 评论 -
C++之队列的实现及各种
一、学习要点:1.队列的特点:a.先进先出b.插入只能从队尾插入c.删除只能从对头删除d.双向操作2.队头指针与队尾指针的区别,队头指针指向实际队首,还是队首空位,以及队尾指针是指向实际队尾,还是实际队尾的下一个空位都是事先约定的,之所以这样,是因为如果队首和队尾都指向实际指针时,当队列为空和队列为1个元素时,队首指针和队尾指针完全一样,故其中必有一个指向实际队尾的后一位。3.队列为...原创 2018-09-20 21:42:19 · 6638 阅读 · 0 评论