C/C++基础
文章平均质量分 83
LJLThomson
专注移动端开发,拓展新知识,更好的提升自己
展开
-
18C++STL之内建算法
C++ STL自带算法1.遍历算法for_each#include <iostream>#include <vector>#include <algorithm>using namespace std;void print01(int val){ cout << val << " ";}class print02{public: void operator()(int val) {原创 2021-07-08 09:43:23 · 92 阅读 · 0 评论 -
19C++11重要新特性
C++11重要新特性1.类内初始化在我们之前,初始化都是在构造函数中,但是有时使用不当,部分成员没有赋值,但被使用时,就会不知道该成员指向了哪里。在许多高级开发语言中,java/go都会给成员默认添加初始值,现在C++11也可以了。#include <iostream>using namespace std;class Student{public: string name{"lisi"};//string name = "lisi" int age{20};//原创 2021-07-08 09:42:58 · 250 阅读 · 0 评论 -
17C++STL之内建函数对象
内建函数对象1.一元谓词仿函数,只有一个参数,叫一元谓词,两个参数,叫二元谓词。2.查找find_if#include <iostream>#include <vector>#include <algorithm>using namespace std;class MyComapre{public: bool operator()(int val) { return val > 6; }};int m原创 2021-07-07 11:12:08 · 105 阅读 · 0 评论 -
16C++STL之set和map
set和map关联容器1.简介map和set封装了二叉树等。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。2.set和map原理以及优点关联容器来说,不需要做内存拷贝和内存移动。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。A / B原创 2021-07-07 11:11:47 · 176 阅读 · 0 评论 -
15C++STL之list
list序列容器1.简介list是一种序列式容器,集成了双向链表的优点,所以其实本质也是双向链表。与java中LinkedList基本一致。2.内部实现机制list每个元素有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首地址;数据域则是本节点的数据;后继元素指针域则保存了后继元素的首地址。优点有以下: 1.特别适合插入、删除 2.特别适合查找首元素和尾部元素,越接近中间,效率越低,时间复杂度为O(n/2) 3.不适合查找中间元素。3.list构造函原创 2021-07-07 11:11:28 · 415 阅读 · 0 评论 -
14C++STL之Stack和queue
stack和queue1.简介 stack是栈,先进后出,其删除只能从容器的一端进行 元素的插入与提取操作 queue是队列,先进先出,其中从容器一端插入元素,另一端 提取元素。2.stacksize( ) :返回栈中元素个数top( ) :返回栈顶的元素pop( ) :从栈中取出并删除元素push(e) :向栈中添加元素eempty( ) :栈为空时返回true注意:栈没有遍历的概念#include <iostream>#include <stack原创 2021-07-06 10:35:18 · 109 阅读 · 0 评论 -
13C++STL之deque
deque容器1.简介deque容器,双端数组,连续存储结构,即其每个元素在内存上也是连续的,类似于vector,不同之处在于, deque提供了两级数组结构, 第一级完全类似于vector,代表实际容器。2.内部实现机制双端队列的数据被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外容器还需要维护一个存放这些数组首地址的索引数组,如下图所示。由于分段数组的大小是固定的,并且它们的首地址被连续存放在索引数组中,因此可以对其进行随机访问,但效率比vector低很多。向两端加原创 2021-07-06 10:34:53 · 162 阅读 · 0 评论 -
12C++STL之Vector
STL之Vector1.简介STL 是一套标准模板库。从广义上来说,容器算法迭代器、仿函数、适配器、空间适配器容器和算法之间通过迭代器进行无缝连接STL几乎所有的代码都采用了模板类或者模板函数。Vector使用上几乎等价于Java中list集合,但是二者在内部实现是完全不一样的。后面会分析。2.Vector存放内置数据迭代器:vector::iterator ;从某种意义上来说,迭代器就是指针push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小。size(原创 2021-07-06 10:34:39 · 136 阅读 · 0 评论 -
11C++异常处理
异常处理1.简介与java一样,程序运行时常会碰到一些错误,如果不处理,很可能导致程序崩溃。C++ 异常处理机制就可以让我们捕获并处理这些错误C++ 异常处理机制会涉及 try、catch、throw 三个关键字。2.常见运行时错误运行时错误是指程序在运行期间发生的错误,例如除数为 0、内存分配失败、数组越界、文件不存在等。C++ 异常(Exception)机制就是为解决运行时错误而引入的。案例:#include <iostream>#include <string>原创 2021-07-05 14:40:31 · 478 阅读 · 0 评论 -
10C++模板泛型编程
模板泛型编程1.简介 泛型,是在运行时确定类型,而不是在编译时确定类型。主要是将类型通用化,减少代码量,实现通用化。2.函数模板等价于java中泛型函数,template<typename T> 通用模板,T主要是告诉编译器后面代码中T不要报错,在运行时确定类型。#include <iostream>using namespace std;template <typename T>void swap2(T &a, T &b){原创 2021-07-05 14:39:53 · 193 阅读 · 0 评论 -
09C++文件读取
文件读取1.输出单个字符#include <iostream>using namespace std;int main(int argc, char const *argv[]){ string str = "hello world"; for (int i = str.length() - 1; i >= 0; i--) { cout.put(str[i]); } cout.put('\n'); system("原创 2021-07-05 14:39:34 · 189 阅读 · 0 评论 -
08C++多态与虚函数
多态与虚函数1.多态介绍什么是多态,简单来说,就是父类指向子类的成员,使用子类的成员,在java中,我们很方便地去使用多态,那是因为java已经为我们对多态进行了处理。在C++中,我们就需要去了解多态的本质,只有了解多态的本质,在使用时,才不会感到迷茫。2.多态简单案例分析#include <iostream>using namespace std;class Animal{public: int age; Animal(int age); void d原创 2021-07-04 22:19:00 · 96 阅读 · 2 评论 -
07C++继承与内存模型分析
继承1.继承简单理解:子类从父类继承成员变量和成员函数父类中所有非静态成员属性都会被子类继承下去,和java一致父类中的private私有成员,是被编译器隐藏了,但是被继承了。#include <iostream>using namespace std;class People{private: string name; int age;public: void setName(string name); void setAge(int a原创 2021-07-04 22:17:59 · 333 阅读 · 3 评论 -
06C++运算符重载
运算符重载1.简介运算符重载,本质是让对象之间可以进行运算。比如,基本类型,int/float/double等等,都可以进行±*/运算,这是因为编译器内部为我们做好了相关的计算。但是非基本类型再加上string(这个C++写好了相关操作),其他对象并没有相应的±*/操作,所以这时就需要运算符重载operator了。 java中没有运算符重载的概念。运算符重载函数本质是函数,完全可以用其他函数去代替,只是没有运算操作符直观。2. operator+1.类中添加operator+操作符#inclu原创 2021-07-04 22:17:05 · 109 阅读 · 2 评论 -
04C++析构函数原理分析
析构函数1.析构介绍析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。Student::~Student(){ cout << "析构被执行" << endl;}析构地时候,基本类型是自动回收地。2.堆上内存析构1.拷贝与赋值介绍我们先看下C++ primer上写的话。通过简化,我们将其分解成两句话:1.拷贝基本类型(系统回收)和指针类型(手动堆内存和自行释放内原创 2021-07-04 22:16:25 · 557 阅读 · 2 评论 -
03C++类和对象
类与对象1.结构体struct————————与C语言差异很大区别如下在C++中,struct可以拥有静态成员,可以从java角度去理解。2.对象理解C++是面向对象语言,现代强大的语言大部分都是面向对象语言,比如java/javascript/go/python等等。可以简单理解:某类事物的集合,比如房子,房子里面有电视,有冰箱,有床,房子的年龄,房子的名称等等,房子是类,里面的东西叫做成员或属性。#include <iostream>using namespace std;原创 2021-07-04 22:15:50 · 103 阅读 · 2 评论 -
02C++指针与引用
C++指针与引用1.指针————————基本与C语言一致但是有以下问题需要注意:long *p;*p = 222;——————这种情况,p的地址是不知道在哪里的,会导致野指针,可能会产生错误。—————*p赋值222, 一个野指针值为222因该这样写:long a =222;long *p;p = &a;2.new在C语言中,已经有malloc来在堆上开辟内存,在C++中,可以继续使用,但是又更好的方式,new.原理:与c语言基本一致,在堆上开辟内存,手动开辟的,需要原创 2021-07-04 22:15:10 · 188 阅读 · 1 评论 -
01C++基础
C++基础语法1.using namespace用途:在C语言开发中,所有的全局变量都是不允许相同的,这显然会带来开发上的弊端,比如小李和小张同时开发一个系统,都有相同的命名,这样编译过程中就会出现问题。所以有了重新命名namespace Li{ //小李的变量定义 FILE fp = NULL;}namespace Han{ //小韩的变量定义 FILE fp = NULL}第一种使用方式:Li::fp = fopen("one.txt", "r"); //使用小原创 2021-07-01 10:27:37 · 83 阅读 · 0 评论 -
10C语言内存泄漏检测工具
VLD(Visual LeakDetector)内存泄露库的使用由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难。当您的程序越来越复杂时,它的内存管理也会变得越来越困难。内存泄漏、内存越界是最常见的内存问题之一。内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉。但是对于长时间运行的程序,其破坏力是惊人的,从性能下降到内存耗尽,甚至会影响到其它程序的正常运行。此外,内存问题存转载 2021-06-30 22:29:34 · 879 阅读 · 0 评论 -
09C语言高级篇之头文件的编写
C语言高级篇之头文件的编写1.extern理解 1.extern,声明,当然也可以同时定义(一般没必要),函数可以省略,使用该关键字定义变量称做“外部变量声明” 2.extern,不是定义,只有引用到时,会去找执行的函数或者具体值 C语言代码是由上到下依次执行的,不管是变量还是函数,原则上都要先定义再使用,否则就会报错。但在实际开发中,经常会在函数或变量定义之前就使用它们,这个时候就需要提前声明。所谓声明(Declaration),就是告诉编译器我要使用这个变量或函数,你现在没有找到它的定义不原创 2021-06-30 22:28:18 · 481 阅读 · 0 评论 -
08C语言高级篇之内存精讲
C语言高级篇之内存精讲1.一个程序在计算机中到底是如何运行的?总结:内存用于存放指令和数据,不负责计算,CPU是负责计算的,为了节省时间,可以从缓存区直接读取数据,加快速度。寄存器,用来完成数学运算、控制循环次数、控制程序的执行流程、标记CPU运行状态,速度非常快,Android Darlk就是基于寄存器的。https://blog.csdn.net/czg13548930186/article/details/52629628?ops_request_misc=%257B%2522reques原创 2021-06-30 22:27:45 · 1322 阅读 · 4 评论 -
07C语言基础
C语言基础1.预处理器C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。简单说,就是再编译之前,进行替换。指令描述#define定义宏#include包含一个源代码文件#undef取消已定义的宏#ifdef如果宏已经定义,则返回真#ifndef如果宏没有定义,则返回真#if如果给定条件为真,则编译下面代码#else#if 的替代方案#elif如果前面的 #if 给定条件不为真,当前条原创 2021-06-30 22:26:35 · 173 阅读 · 2 评论 -
06C语言基础-文件读取
C语言基础1.共用体union1:共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型2:您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值3.共用体占用的内存应足够存储共用体中最大的成员总结:共用体取成员最大字节,存储多种不同类型数据,但是每次存储,都会影响之前存储的数据,#include <stdio.h>#include <stdlib.h>union Data{ int i; float f; cha原创 2021-06-30 22:25:39 · 194 阅读 · 0 评论 -
05C语言基础-结构体
C语言基础-结构体1.简介C语言,数组只能存储相同类型的一类数据,而结构体,类似于java中面向对象,可以存储不同类型的值。注意:C语言结构体中,是没有函数的,但是在C++中,允许有函数2.定义结构体三种形式1.声明结构体struct book {char title[MAXTITL];//一个字符串表示的titile 题目 ;char author[MAXAUTL];//一个字符串表示的author作者 ;float value;//一个浮点型表示的value价格;};//注意分号不原创 2021-06-30 22:24:19 · 156 阅读 · 0 评论 -
04C语言基础-指针函数
c语言指针函数和函数指针1.什么是函数对比java的方法,一致。2.函数返回类型可以是任意类型,函数指针。3.指针函数指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。int fun(int x,int y);————————返回值,intint *fun(int x,int y);————————指针函数,返回的是一个int*的指针,是一个地址,本质是函数#include <stdio.h>#include <stdl原创 2021-06-30 22:23:28 · 123 阅读 · 0 评论 -
03C语言基础-指针
C语言基础-指针1.简介什么是指针,指针就是内存地址,32位占用4字节,64位占用8字节,指针变量是用来存放内存地址的变量。简单理解:指针4字节或8字节的内存空间,用于存储内存地址。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JA50x4gM-1625062971571)(G:\markdown\C++\一级指针.PNG)]通过上面图,我们可以得出以下结论:1.p指针所指向的地址发生改变,并不会影响到之前指向的地址2.p所指向的地址数值发生改变,则所指向的地址原创 2021-06-30 22:22:48 · 458 阅读 · 4 评论 -
02C语言基础
C语言基础1.数据类型char1 字节-128 到 127 或 0 到 255unsigned char1 字节0 到 255signed char1 字节-128 到 127int2 或 4 字节(大部分都是)-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 字节(大部分都是)0 到 65,535 或 0 到 4,294,967,295short2 字节原创 2021-06-30 22:21:50 · 167 阅读 · 1 评论 -
01C/C++安装
C++安装1.下载MinGW网址:http://mingw-w64.org/doku.php/download1.选择Downloads,进入 MinGW-w64 下载详情页面。2.Ctrl+F,搜索关键词“MingW-W64-builds”,点击进入3.点击“Sourceforge”,进入下载2.安装MingW说明:Version 指的是 gcc 的版本,如果没有特殊的需求,一般选择最高的版本号即可。操作:在这个版本中,最高版本是8.1.0 ,选中它即可。说明:电脑系统是 64位原创 2021-06-30 22:17:59 · 201 阅读 · 0 评论