![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
语法与常用知识
bug_killer@
须知参差多态,乃是幸福的本源。
展开
-
C++ prev()函数用法
含义:pre具有前一个的意思,该函数可用来获取一个距离指定迭代器 n 个元素的迭代器。具体用法如下图:#include <bits/stdc++.h>using namespace std;int main(void){ vector <int> vc; for(int i=0;i<5;i++) vc.push_back(i+1); vector<int>::iterator it = vc.end(); // a原创 2022-03-20 14:30:43 · 3963 阅读 · 1 评论 -
泛型算法(一)初始泛型算法
泛型算法的编程假定:算法永远不会改变底层容器的大小(可以修改元素的值,移动元素,但是不会直接添加或者删除元素)。一、只读算法共性:一般都接受两个参数,一个指向要处理的第一个元素的迭代器,另一个指向最后要处理的元素的下一个位置的迭代器。1、find的简单使用#include<iostream>#include<vector>#includ...原创 2019-03-20 11:33:45 · 108 阅读 · 0 评论 -
IO库
总结:1、不能拷贝或对IO对象赋值eg:ofstream out1,out2; out1=out2; //错误,不能对流对象赋值ofstream print=(ofstream); //错误,不能初始化ofstream参数out2=print(out2); //错误,不能拷贝流对象2、条件状态一旦一个流的操作失败,其上后序的IO操作都将失败,所以可以将流当做一个条...原创 2019-02-17 10:39:03 · 112 阅读 · 0 评论 -
二、string库与vector库
一、string类库(字符串)#include<iostream>#include<string>using namespace std;int main(void){ //string类型的定义与初始化 string s1; string s2="123456789"; string s3(10,'p'); //n个字符初始化 string s...原创 2019-02-16 11:50:16 · 91 阅读 · 0 评论 -
C++总结一:变量与数据类型
一、数据类型1、字节数与范围:参考文章2、注意:(1)unsigned int表示无符号,只能表示大于0的数字(2)float有7个有效位,double有16个有效位,一般选择double 二、变量的声明与定义1、声明:使得名字为程序所知,一个文件使用别处定义的名字必须包含对那个名字的声明。2、定义:创建于名字相关的实体。eg:extern int ...原创 2019-02-16 09:44:03 · 224 阅读 · 0 评论 -
C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数
(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)原创 2021-02-07 21:53:43 · 282 阅读 · 0 评论 -
栈|堆|寄存器|代码区|全局区
栈:存放局部变量和参数值堆:存放malloc(C)和new(C++)动态申请的内存寄存器:存放register变量代码区:存放二进制代码全局区:存放全局变量原创 2021-02-01 09:24:05 · 108 阅读 · 0 评论 -
C++重载函数、带有默认参数的函数、内联函数
重载函数1、定义:在同一个名字空间中存在两个或者多个具有相同名字的函数所构成的语法现象。Note:(1)调用重载函数的语句,是由编译器在编译期确定的。(2)编译器判断某个函数调用语句所对应的重载函数时,判断依据是***函数参数的类型、个数和次序***。(3)如果编译器无法判定,就会报告二义性错误。带有默认参数值的函数内联函数1、普通函数调用:函数调用时:参数及部分CPU寄存器的内容进栈,控制流跳转函数返回时:返回值及寄存器值出栈,控制流跳转2、目的:减小函数调用开销3、方法:代码插原创 2021-02-04 17:45:24 · 193 阅读 · 0 评论 -
C++内存的知识 & 常量与指针 & const
C++变量存放的位置简介1、stack(栈):编译器自动分配、释放(存放局部变量,函数参数,返回数据,返回地址等内容)2、heap(堆):一般由程序员分配、释放(为动态内存分配提供地址空间)3、全局区/静态区:全局区和静态区存放在同一个区,程序结束释放4、常量区:常量不可修改存储位置堆向高地址方向生长;栈向低地址方向生长;数组和指针在内存中的位置1、char a[] = “world”;对于数组a,a是数组a的首地址的别名,要访问数组元素可以用a[i]或者*(a+i);2、char原创 2021-02-04 16:43:28 · 231 阅读 · 0 评论 -
C++--auto和decltype自动类型推导
1、类型系统1、定义:在编程语言中,“类型系统”是将“type”属性指定给不同计算机程序构造块的规则集。2、使用类型系统的好处:类型系统可以减少程序中可能出现的bug类型系统减少BUG的方法是:定义不同程序块间的接口检查多个块之间是否以一致的方式连接在一起3、静态类型&动态类型程序设计语言的类型系统机制会检查连接在一起的多个块的一致性(计算机程序的构造块:计算机程序构造块是不同大小粒度的计算机程序组成部分,它包括变量、表达式、函数或者模块等。)上述检查若发生在编译期,称为静原创 2021-02-03 20:18:03 · 163 阅读 · 1 评论 -
C++风格的强制类型转换--static_cast<type> value
C风格的强制类型转换格式:(type) value举例:#include <iostream>using namespace std;int main(void){ int x = 11; double ans = (double)x; printf("%.3f\n",ans); return 0;}C++风格的强制类型转换语法:static_cast (value)举例:#include <iostream>using namespace std;原创 2021-02-03 18:19:21 · 284 阅读 · 1 评论 -
C++--浅拷贝与深拷贝
1、案例一:#include <iostream>#include <cstring>using namespace std;class Pixel{private: char *name; int x,y;public: Pixel(char *nm = "noname",int xx = 0,int yy = 0){ x = xx;y = yy;name = nm; }//浅拷贝 void show(){ cout<<x&原创 2021-02-03 17:40:26 · 102 阅读 · 0 评论 -
C++的指针与引用
指针1、指针定义:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。2、指针的声明与运用:#include <iostream>using namespace std;int main(void){ int x = 20; int *p;//声明指针 p = &x;//指针指向地址,然后修改指针所指向的地址 *p = 20;//*p 表示取指针的值,并将地址为(&x)的内存单元的内容修改为20 return 0;}3、指针与数组可原创 2021-02-03 16:38:52 · 103 阅读 · 0 评论 -
为什么要将基类的析构函数声明为虚函数
当基类的函数不为虚函数时,子类中所有成员变量的类中分配的内存将可能泄露。将基类的虚构函数设置为virtual型,派生类的所有虚构函数都是virtual型,这就保证了任何情况下都不会出现析构函数没有被调用而出现内存泄漏的现象。...原创 2021-02-01 16:22:31 · 177 阅读 · 0 评论 -
继承与多态
多态:不同对象在接受相同消息时产生的不同动作。C++的多态行表现在运行和编译两个阶段:运行时:多态性通过继承和虚函数来表示虚函数:在基类中冠以virtual的成员函数,允许在派生类中对基类的虚函数重新定义;纯虚函数:在基类中为其派生类保留一个函数的名字,以便派生类对其进行定义。不允许直接调用纯虚函数从基类继承来的纯虚函数,在派生类中仍是虚函数,一个类至少有一个纯虚函数,这个类称为抽象类,抽象类必须用作派生其他类的基类,不能直接创建对象。编译时:多态性体现在函数和运算符的重载上...原创 2021-02-01 12:01:53 · 86 阅读 · 0 评论 -
delete与delete[]的区别
delete只能调用一次析构函数,而delete[]会调用每个函数的析构函数原创 2021-02-01 10:37:56 · 66 阅读 · 0 评论 -
malloc/free与new/delete的区别
区别:1、malloc需要手动计算分配的空间大小,new是编译器自己计算;2、malloc申请内存失败返回NULL,而new申请失败回抛出异常3、malloc返回的指针类型为void*,需要进行强制类型转换,而new可以自动匹配返回指针的类型4、无论释放几个空间大小,free只传递指针,多个对象时,delete要加[];5、malloc和free只是开辟空间并释放,new/delete不仅会开辟空间还会调用构造和析构函数进行初始化和清理...原创 2021-02-01 09:54:54 · 104 阅读 · 0 评论