
C++
yam_sunshine
这个作者很懒,什么都没留下…
展开
-
类与对象
一、类的6个默认成员函数(一)构造函数1、定义:是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器 调用,保证每个数据都有一个合适的初始值,并且在对象的生命周期内只调用一次。2、特征:构造函数的主要任务并不是开空间创建对象,而是初始化对象。(1)函数名与类名相同;(2)无返回值;(3)对象实例化时编译器自动调用对应的构造函数。(4)构造函数可以重载。class Da...原创 2019-01-18 15:22:41 · 135 阅读 · 0 评论 -
面向对象---理解多态
一、多态的概念多态通俗来说,就是多种形态,完成某个行为,当不同的对象去完成某个行为时会产生不同的状态。二、多态的定义及实现1、多态定义的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同行为。例如在火车站买票时,学生和成人分别去买票,学生买的是半价票,成人买的是全价票。同样是买票,但是不同的对象去买票时产生了不同的行为。在继承时要构成多态还有两个重要的条件:(1)调...原创 2019-03-25 20:22:11 · 569 阅读 · 0 评论 -
继承笔试题---判断p1,p2,p3的关系
代码:class Base1{public: int _b1;};class Base2{public: int _b2;};class Derive :public Base1, public Base2{public: int _d;};int main(){ Derive d; Base1* p1 = &d; Base2* p2 = &am...原创 2019-03-22 17:34:45 · 932 阅读 · 0 评论 -
面向对象----多态的原理
一、虚函数表首先引入一道笔试题,sizeof(Base)的值是多少?class Base{public: virtual void Func1() { cout << "Func1()" << endl; }private: int _b;};int main(){ Base b; cout << sizeof(...原创 2019-04-07 19:23:16 · 305 阅读 · 2 评论 -
单继承和多继承的虚函数表
前面两篇关于多态的博客已经详细介绍了多态的基础知识点和多态的底层实现原理,下面将主要介绍一下单继承和多继承的虚函数表~~~一、单继承中的虚函数表首先来看一段代码:class Base{public: virtual void Func1() { cout << "Base::Func1()" << endl; } virtual void Fu...原创 2019-04-08 17:39:56 · 2150 阅读 · 0 评论 -
set和multiset的用法详解
一、set文档介绍1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素 不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。4. set容器通过key访...原创 2019-04-16 21:00:12 · 6472 阅读 · 0 评论 -
二叉搜索树的基本特征和模拟实现
一、二叉搜索树的定义二叉搜索树又称二叉排序树,它或者是一颗空树,或者是一棵排序树,它具有如下性质:1、若它的左子树不为空,则它的左子树的所有节点的值都小于根节点的值2、若它的右子树不为空,则它的右子树的所有节点的值都大于根节点的值3、它的左右子树也都是二叉搜索树二、二叉树的主要操作分析1、二叉树的插入a.若二叉树为空,则直接插入,然后返回trueb.若二叉树不为空,按照二叉搜索树的...原创 2019-04-24 18:43:15 · 846 阅读 · 0 评论 -
C++中 pair 和 make_pair 的用法
参见大佬博客:https://blog.youkuaiyun.com/weixin_42825576/article/details/81571419另外我再补充一点:pair是二元组类模版,make_pair实际上是创建二元组的函数模版,在C++中,函数模版可省略参数,make_pair也是利用这一特性。...转载 2019-04-25 11:20:42 · 3736 阅读 · 0 评论 -
map和multimap的用法详解
一、map的文档总结1、map是关联式容器,它按照key值比较存储,默认是小于;2、在map中,键值key通常用于唯一的标识元素,而值value中存储与此键值key关联的内容;键值key和value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,为其取别名为pair;3、map中的元素是键值对;4、map中的key是唯一的,并且不能...原创 2019-05-08 12:11:51 · 29172 阅读 · 3 评论 -
三种方法统计map中的元素个数
利用map可以统计元素个数,下面主要介绍这三种方法:1、利用find函数统计每一个元素出现的次数void test_map2(){ string strs[] = { "苹果", "香蕉", "草莓", "苹果", "香蕉", "香蕉", "香蕉", "苹果", "香蕉", "草莓" }; map<string, int> countmap; //利用find统计每一...原创 2019-05-08 12:28:09 · 30613 阅读 · 2 评论 -
C++范围for详解
范围for是遍历方式中的一种,以前在遍历的时候,经常会用到范围for,但对它的使用原理并不是很清楚,下面将对其做详细的介绍。以一段代码为例:int main(){ string strs[] = { "苹果", "香蕉", "草莓", "橘子" }; for (const auto& e : strs) { cout << e << " ";...原创 2019-05-07 20:05:06 · 2917 阅读 · 2 评论 -
C++异常基础知识点
一、C语言传统的处理错误的方式1、终止程序:例如assert,但是这种处理异常的方式太粗暴,如果发生内存错误,除0错误时就会终止程序。2、返回错误码:这种错误需要程序员自己去查找对应的错误。例如系统很多库的接口函数都是通过把错误码放到error中,表示错误。3、C标准库中setjmp和longjmp来处理异常,但是这种方式不常用,了解即可。二、C++异常概念异常是一种处理错误的...原创 2019-05-15 20:26:52 · 259 阅读 · 0 评论 -
牛客网:倒置字符串
题目描述:将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I这道题我想到两种方法:1、从后往前遍历字符串,以空格分割,找到每个单词,然后再遍历每个单词,将单词逐个链到新字符串上,注意需要将第一个单词单独处理,具体代码如下:#include <iostream>#include <string>...原创 2019-05-24 13:28:26 · 348 阅读 · 0 评论 -
vector创建二维数组
#include <iostream>#include <vector>#define count 3using namespace std;int main(){ vector<vector<int>> v(count); //初始化一个3*3的矩阵 for (int i = 0; i < v.size(); i++) {...原创 2019-03-12 20:48:56 · 1067 阅读 · 0 评论 -
vector基本接口的模拟实现
#pragma once#include <iostream>#include <assert.h>#include <algorithm>using namespace std;namespace My{ template <class T> class Vector { public: typedef T* iterato...原创 2019-03-12 20:09:16 · 160 阅读 · 0 评论 -
swap的值交换和指针指向交换的不同
string s1("hello world");string s2("hahahah");//重新开辟空间,交换s1,s2的值swap(s1,s2);//交换两个指针指向的不同空间s1.swap(s2);原创 2019-01-21 18:51:52 · 788 阅读 · 0 评论 -
类和对象上
一、C++和C预言的区别c语言:1、c语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题;2、c++是面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成.3、在c语言中,结构体只能定义变量;在c++中,结构体内不仅可以定义变量,也可以定义函数。二、类的定义1、声明和定义全放在类体中;需要注意的是:成员函数如果放在类中,编译器可能会将其...原创 2019-01-16 20:09:31 · 184 阅读 · 0 评论 -
析构和构造对不同类型的操作
class Time{public: Time() { _hour = 0; _minute = 0; _second = 0; }private: int _hour; int _minute; int _second;};class Date{public: Date(int year,int month,int day) { _year = ye...原创 2019-03-05 21:50:11 · 124 阅读 · 0 评论 -
C++入门基础知识点
命名空间(namespace)使用规则:namespace+命名空间的名字+{}目的:对标识符本地化,避免命名冲突原创 2019-02-26 21:02:00 · 338 阅读 · 0 评论 -
C/C++内存分布
int globalVar = 1;static int staticGlobalVar=1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 =...原创 2019-02-26 21:06:49 · 177 阅读 · 0 评论 -
str=""和str=" "
str=""int main(){ //test(); string str = ""; for (size_t i = 0; i < str.size(); i++) { cout << str[i] <<endl; } system("pause"); return 0;}输出结果:以上代码表明,当str=""时,字符串是一原创 2019-03-06 16:57:07 · 2510 阅读 · 0 评论 -
OJ-删除排序数组中的重复项(快慢指针)
给定一个排序数组,在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不使用额外的数组空间,在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。此题可用快慢指针的思想来解决,慢指针slow,快指针fast,当slow的值等于fast的值时,fast走,当不相等时,slow++,nums[slow]=nums[fast]class Solution {publ...原创 2019-03-04 18:28:21 · 482 阅读 · 0 评论 -
数字与字符串之间的相互转换(itoa atoi)
一、数字转换为字符串C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,以下是几个常用函数:itoa():将整型值转换为字符串ltoa():将长整型值转换为字符串ultoa():将无符号长整型值转换为字符串gcvt():将浮点型数转换为字符串,取四舍五入ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点fcvt():指定位数...原创 2019-03-15 21:27:17 · 1512 阅读 · 0 评论 -
优先级队列(priority_queue)基础知识点
一、优先级队列的定义在文档中,是这样定义优先级队列的1、优先级队列是一钟容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的;2、优先级队列类似于堆,在堆 中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素);3、优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为底层容器类,queue提供一组特定的成员函数来访问其元素,元素从特定元素的尾...原创 2019-03-16 13:01:42 · 1432 阅读 · 0 评论 -
C++访问限定符
对于C++中的访问限定符的理解,首先得明白一个概念,访问限定符是用来限定类的,而不是限定对象的,只要类型相同就可以互相访问C++中的访问限定符可以分为三种,public访问、protected访问、private访问。public访问:在程序的任意位置都可以访问。protected访问:在访问限定符的定义中,protected和private差不多,都可以理解为私有的,只能在类里面进行访问,...原创 2019-03-20 14:52:55 · 2730 阅读 · 0 评论 -
容器适配器
在C++中,对于容器适配器的理解我们可以举个例子,比如现在给定一个容器vector,而我们希望它以栈的样子呈现出来,也就是可以支持后进先出,有栈的一些基本接口的操作等,此时我们不需要自己再重新写一个数据结构,而是把原来的容器vector封装一下,改变它的接口,就可以正常使用了,下面我用一段代码来实现栈去适配vector的操作:#pragma once#include &lt;iostream&...原创 2019-03-17 17:44:31 · 216 阅读 · 0 评论 -
vector基础知识点
一、vector基本介绍vector属于STL(标准模板库)的六大组件之一容器部分,它类似于数组。具体有以下几个特点:1、动态可变,即一个可变大小数组的序列容器;2、类似于数组,vector采用的连续存储空间来存储元素,即可用下标对vector的元素进行访问,和数组一样高效;3、vector使用动态分配数组来存储它的元素。当有新的元素插入时,为了增加存储空间,这个数组会被重新分配大小。具体...原创 2019-03-12 20:05:21 · 419 阅读 · 0 评论 -
堆与栈的区别
一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(...转载 2019-07-10 17:29:50 · 118 阅读 · 0 评论