将博客搬至CSDN
自从上一次学习STL的组件(string)已经过去有些日子了,主要是还在进行其他方面的学习,现在有了空闲继续来学习C++STL方面,此次学习过程中也是让我深深感到了C++STL的实用,总之要学习和总结的东西还有很多,就请路过的看客和我一起学习前进吧。-----(≧∇≦)ノ首先是关于vector的介绍经过一遍学习后,我也大致了解了vector的学习步骤,我将其分为以下三个部分:有人可能会问那一条红线
首先在谈到菱形虚拟继承之前先说明一下菱形继承:菱形继承是多继承的一种特殊情况(如下,画渣勿喷):图中BC两个类都继承了A类,而BC又都被D类继承按照继承的定义,派生类当中都包含了基类,而这时虚拟继承这种情况就会产生问题<a>数据冗余首先是按照虚拟继承的这种方法,D类当中就包含了两份A类数据(分别来自B类和C类)<b>二义性其次是,当我们通过D类去访问A类中的数据时,就会产生
首先是定义:explicit关键字只能修饰只有一个参数的构造函数,或者有多个参数,但是除第一个参数外其他的参数都有默认值的构造函数。它的作用是表明构造函数是显式方式显示的。(类构造函数默认为隐式)如果类构造函数参数大于或等于两个时,是不会产生隐式转换的,所以explicit关键字也就无效了举个例子:classAMD{public:AMD(intlevel){//这里的构造函数默认就是隐式声明...
本文转自https://blog.csdn.net/l198738655/article/details/79872738sort(first_pointer,first_pointer+n,cmp)该函数可以给数组,或者链表list、向量排序。实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方
(转自:https://blog.csdn.net/nwpu_yike/article/details/22100615)一、类型转换——数字->字符串C++stringstream类是一种十分有用的类,特别是当我们需要在程序中使用字符串和数字数据互相转换的时候。要想在程序中使用stringstream类,我们需要在源程序文件中包含头文件include<sstream>。stri
本题整体思想不难,主要是想好用什么容器去存储计算值和计算结果值,这里用的是字符串,当然也可以用数组,题目链接:https://www.nowcoder.com/practice/5821836e0ec140c1aa29510fd05f45fc?tpId以下为解答代码(具体细节看注释):stringAddLongInteger(stringaddend,stringaugend){inti=0,n=
首先是概念:二叉搜索树又称二叉排序树,它具有以下的性质:若是左子树不为空,则左子树上所有节点的值小于根节点的值若是右子树不为空,则右子树上所有结点的值大于根节点的值二叉搜索树的左右子树也是二叉搜索树二叉搜索树的中序排列是一个有序数列再下来是它的实现首先是构造节点:template<classK>structBStreeNode{BStreeNode(constK&date=K(
重点是要意识到利用flag来区别处理在“”内外的字符#include<iostream>#include<vector>#include<string>usingnamespacestd;intmain(){stringstr,stt;inti=0;boolflag=0;vector<string>arr;while(getline(cin,str)
代码如下:#include<iostream>usingnamespacestd;voidqS(int*array,intleft,intright){if(left<right){//快速排序的终止条件,当仅剩下一个元素则结束快速排序intkey=array[left];intlow=left,high=right;while(low<high){while(key<
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。否则,编译器会报错。dynamic_cast运算符的调用形式如下所示:dynamic_
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:friend类型函数名(形式参数);友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。一个函数可以是多个类的友元函数,只需要在各个类中分别声明。友元函数的调用与一般函数的
1.继承体现了面向对象设计的层次结构,体现了有捡到到复杂的认知过程2.继承是使代码可以复用的最重要手段3.继承方式和访问限定符4.继承基类成员访问方式的变化5.实际运用中一般都是使用public继承,几乎很少使用protected/private继承6.派生类对象可以赋值给基类的对象/基类的指针/基类的引用但是基类对象不能赋值给派生类对象7.基类的指针可以通过强制类型转换赋值给派生类的指针。但是必
在使用printf输出时,关于字符串输出格式对于%-a.bs:表示左对齐a表示输出占的宽度,如果这个宽度不够,则自动扩展到足够宽度b表示输出字符串中多少个字符,如果原字符串长于这个宽度,则截断,多余的不输出2.关于指针数组和数组指针,比方说:<1>intp1[10];和<2>int(p2)[10];分清楚的关键是依靠运算符优先级,[]优先级大于,所以p是一个数组,int修饰
计算结构体的大小:结构体中可以定义的数据类型:1.基本类型2.上面已经出现过的数据类型,比如说上面已经定义过的结构体3.指向自己的指针因为内存对齐的问题,各个数据类型放的位置不同就会导致结构体的大小不一样,那么到底怎样计算一个结构体的大小呢?先介绍一个概念——偏移量,结构体中的偏移量就是结构体成员和结构体变量的地址之差,比如说第一个结构体成员的偏移量就是0,第二个结构成员的偏移量就是第一个结构体成
这是一个经常会忘却的知识点,最近也一直在吃这方面的亏索性整个复习一遍把这个知识点彻底牢记一.一维数组若有数组inta[6];a的值是数组首元素的地址,所以a+1,就是第二个元素的地址。而&a是整个数组的地址,所以&a+1,就是向后移动(10*4)个单位。所以相差40一维数组方面较为基础,主要是记忆所以不举例代码二.二维数组二维数组方面是需要稍微费心学习下的首先是定义方面若是有数组a
本来我是不怎么关注过这个点的,但是今天的一道题把我给难住了,看过答案之后才知道就是因为我对于erase接口使用的不了解造成的,所以特意把这道题拿出来说一下题目要求是给出以下代码的输出结果:#include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>a;a.push_back(1
运算符优先级优先级运算符高++,--(用作前缀);(),+,-(一元),!,~,/,%+,-<<,>><,>,<=,>===,!=&^|&&||=,=,/=,%=,+=,-=低++,--(用作后缀)
第一部分连接https://blog.51cto.com/14232799/2447326二.String的模拟实现在第一步之后紧接着的就该是模拟实现部分,这一部分主要是体现自己对第一部分的掌握情况。强烈推荐和我一样在学习String的朋友们自己动手实现一下。因为在面试中,面试官总喜欢让我们自己来模拟实现string类。自己来实现String最主要是实现String类的构造、拷贝构造、赋值运算符重
在C++中,NULL是一个宏,其实质是0。而nullptr是从C++11开始引入的关键字。在C语言中,NULL的定义为(void)0,因为C语言可以隐式转换。但在C++中,intp=(void)0这样的语句会报错,因为在C++中void类型是不允许隐式转换成其他类型的,因此在C++中直接将NULL定义为0,一个int类型的变量。这样导致在出现重载函数的情况下,程序会出现问题。所以,C++11加入了
最近在学习C++时,进入到了STL的学习阶段,在发现到这个部分的重要性时,我打算把对STL的学习分步骤记录下来,我首先打算学习的是组件String的部分,此文章主要只记录内部构造和对象基本操作。STL是由C++提供的标准模板库,内含多个主要组件,此次总结的是String部分的内容。String在STL中算是较为重要的部分,所以需要我重点攻克。先放一张我学习String后对于此部分知识点的概括。首先
realloc,malloc,calloc的区别三个函数的申明分别是:voidrealloc(voidptr,unsignednewsize);voidmalloc(unsignedsize);voidcalloc(size_tnumElements,size_tsizeOfElement);都在stdlib.h函数库内它们的返回值都是请求系统分配的地址,如果请求失败就返回NULLmalloc用于
利用rand()函数来返回一个一随机数值,范围在0至RAND_MAX间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)。具体要看定义的变量类型,int整型的话就是32767。此时产生的是一个伪随机数值,在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。利用sra
单向链表(无头无循环)1.头插cur->next=head;head=cur;2.后插cur->next=pos->next;pos->next=cur;3.头删tmp=head->next;free(head);head=tmp;4.后删tmp=pos->next;pos->next=tmp->next;free(tmp);5遍历头for(cur=
项目头文件:#ifndef_LIST_H_#define_LIST_H_#include<stdio.h>#include<stdlib.h>typedefintLTDataType;typedefstructListNode{LTDataType_data;structListNode*_next;structListNode*_prev;}ListNode;typede
头文件如下:#ifndef_SLIST_H_#define_SLIST_H_typedefintSLTDataType;typedefstructSListNode{SLTDataTypedata;structSListNode*next;}SListNode;voidSListInit(SListNode**phead);voidSListDestory(SListNode*phead);SLi
头文件如下#ifndef_SEQLIST_H_#define_SEQLIST_H_//顺序表的动态存储#include<stdio.h>#include<stdlib.h>#include<string.h>typedefintSLDataType;typedefstructSeqList{SLDataType*array;//指向动态开辟的数组size_tsi
#include<stdio.h>#include<stdlib.h>voidmymemcpy(char*str1,char*str2,intk){inti;for(i=0;i<k;i++,str1++,str2++){*str1=*str2;}}intmain(){intk=3;charstr1[]="";char*str2="ancde";mymemcpy(str
#include<stdio.h>#include<stdlib.h>intmystrcmp(char*str1,char*str2){for(;*str1!='\0';str1++,str2++){if(*str1!=*str2){if(*str1>*str2){return1;}elseif(*str1<*str2){return-1;}}}if(*str1
#include<stdio.h>#include<stdlib.h>#include<string.h>char*mystrchr(char*str,charc){inti;for(i=0;i<strlen(str);i++){if(*(str+i)==c){returnstr+i;}}returnNULL;}intmain(){char*str="ab
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号