![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识-个人复习
文章平均质量分 52
自己记录
kankan_202104
这个作者很懒,什么都没留下…
展开
-
7.18C++:排序算法--插入排序、选择排序、冒泡排序、查找算法:二分法
插入排序#include <iostream>using namespace std;template<class T>void insertionSort(T a[], int n) { int i, j; T temp; for (i = 1; i < n; i++) { temp = a[i]; j = i; while (j > 0 && temp < a[j-原创 2021-07-18 21:23:51 · 107 阅读 · 2 评论 -
8.3C++:插入迭代器、顺序容器的适配器、栈和队列、优先级队列
1 插入迭代器插入迭代器参数是容器back_iterator iter(s); //将iter定义为容器s的后插迭代器*iter = 5; //相当于在尾部插入52 顺序容器的适配器#include <iostream>#include <string>#include <stack>using namespace std;int main(){ stack<char> s; string str;原创 2021-08-15 16:50:09 · 134 阅读 · 0 评论 -
8.24C++:setiosflags操纵符和setf函数、利用cmd修改系统中的文件
1 setiosflags操纵符和setf函数setiosflags操纵符需要插入到输入/出流cout << setiosflags(ios_base:: | ios_base:????setf是流对象的成员函数,cout.setf(ios_base:: , ios_base:: )#include <iostream>#include <iomanip>#include <string>#include <fstream>using原创 2021-08-24 22:29:48 · 300 阅读 · 0 评论 -
6.22C++:复习常引用、数组类模板、数组类模板的使用、“输入一个数,输出比它小的质数”普通写法 =
1 数组类模板list = new T [size]; // 动态分配能够存放size个T元素的空间,首地址赋值给list析构函数中释放空间为什么要写复制构造函数?——存在指向动态分配内存空间的指针的时候,需要进行深层复制。避免浅层复制两个指针指向同一内存空间,释放空间时释放两次,程序报错。...原创 2021-06-23 23:29:52 · 283 阅读 · 0 评论 -
7.26C++:顺序容器、顺序容器的接口(详见P295)、反向迭代器、顺序容器操作实例、顺序容器的特征(vector、deque、list、forward_list、array)、顺序容器的比较和选择
deque(n):双端队列emplace(v):安放assign(v):分配、布置#include <iostream>#include <list>#include <deque>#include <iterator>using namespace std;template <class T>void printContainer(const char* msg, const T& s) { cout <原创 2021-07-26 20:42:10 · 128 阅读 · 0 评论 -
7.15C++:栈的原理、栈类模板、switch case用法
栈的原理栈是函数实现返回的原理。按符号的优先级压入栈,全部完毕后按“先进后出,后进先出”的顺序出栈并计算。原创 2021-07-17 16:48:50 · 217 阅读 · 0 评论 -
8.20C++:映射、多重映射、pair、equal_range、顺序容器和关联容器的迭代器区别
1 映射通过first、second读取数据案例①:有五门课程,每门都有相应学分,从中选择三门,输出学分总和#include <iostream>#include <map>#include <string> //使用string#include <utility> //包含make_pair函数using namespace std;int main() { map<string, int> courses; //键、原创 2021-08-21 01:04:03 · 393 阅读 · 0 评论 -
8.23C++:输入流类、get函数与cin的区别、put函数、getline函数、文件输入流、streampos类型、字符串输入流、输入/输出流
1 输入流类cin是istream事先预定义好的实例打开文件时与输出流类相同,用按位或增加条件“|”一般来讲,输入尽量少用各种格式控制原创 2021-08-24 11:19:10 · 1289 阅读 · 1 评论 -
8.18C++:关联容器、无序关联容器、集合(set)、upper_bound和lower_bound
upper_bound和lower_boundlower_bound:返回upper_bound:原创 2021-08-19 00:19:40 · 359 阅读 · 0 评论 -
6.28C++:指针就是地址、节点、链表、链表类模板、->访问
节点包括:数据域和指针域,当前节点的指针域包含的指针为下一个节点的地址指针就是地址,地址就是指针;指针变量是一个变量,它保存了基本类型变量的地址。如果指针变量p保存了变量a的地址,那么称作p指向了a,p 就是变量a。如果p是一个指针变量, p 表示了以 p的内容为地址的变量,就是* p指向的变量。可以这样来理解指针:指针是一种特殊的语言机制,它存放的是其它变量的地址,并且可以通过解引用操作符*,来获取该地址的内容。这也造成了一种指向的关系。...原创 2021-07-15 23:16:11 · 1033 阅读 · 2 评论 -
C++数据结构第一章:二进制操作符、尾递归
1 常用的二进制操作&、 << 、>>等,会将符号两边的整数类型转换为二进制,“<<”、“>>”不适用于浮点数;"<<"相当于乘2:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零;“>>”相当于除以2并向下取整:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1;通过“n&1”可以判断是基数还是偶数,通过(a>b)?a:b可以原创 2021-08-18 22:47:03 · 255 阅读 · 0 评论 -
8.23C++:I/O流及流类库、输出流、setiosflags操纵符(manipulator)、setprecision()操纵符、文件输出流、字符串输出流
1 I/O流及流类库流类库的结构2 输出流ostream对象流到文本文件中;ofstream可以将对象与文件关联起来;ostringstream可以将对象与字符串关联起来。setprecision()、setiosflags()、setw均在< iomanip >中3 setiosflags操纵符(manipulator),字面:给ios流设置标识#include <iostream>#include <iomanip>#include &l原创 2021-08-23 16:33:11 · 262 阅读 · 0 评论 -
8.21C++:函数对象、STL提供的函数对象、函数适配器
1 函数对象函数对象是行为类似函数的对象。一个类对象,表现出一个函数的特征,即通过对象名+(参数列表)的方式使用一个类对象。使用STL中提供的或自定义的迭代器和**函数对象,**配合STL的算法,组合出各种各样的功能。通过函数对象而不使用函数指针,可以增加通用性,提高效率。为什么使用函数对象函数对象概念:泛化的函数①将普通函数作为函数对象:传递函数名#include <iostream>#include <numeric> //包含accumulate算法#in原创 2021-08-22 23:31:51 · 147 阅读 · 0 评论 -
7.17C++:队列类模板
队列类模板#ifndef QUENE_H#define QUENE_H#include <cassert> //assert在栈、队列等数据结构中十分好用template<class T, int SIZE = 50>class Quene {private: int front, rear, count; //用int类型的front、rear当做指针 T list[SIZE];public: Quene(); void insert(const T&原创 2021-07-17 18:09:23 · 141 阅读 · 0 评论 -
7.23C++:泛型程序设计基本概念:概念&模型、STL基本组件:容器&迭代器&函数对象&算法、STL程序实例:transform算法
术语:概念 用来界定具备一定功能的数据类型。例如: 将“可以比大小的所有数据类型(有比较运算符)”这一概念记为Comparable 将“具有公有的复制构造函数并可以用‘=’赋值的数据类型”这一概念记为Assignable 将“可以比大小、具有公有的复制构造函数并可以用‘=’赋值的所有数据类型”这个概念记作Sortable。 对于两个不同的概念A和B,如果概念A所需求的所有功能也是概念B所需求的功能,那么就说概念B是概念A的子概念。例如: Sortable既是Comparabl原创 2021-07-24 17:45:34 · 121 阅读 · 0 评论 -
8.25C++:异常处理基本思想、异常处理中的构造与析构、标准程序库异常处理
1 异常处理基本思想①处理除0异常#include <iostream>using namespace std;int divede(int x, int y) { if (y == 0) throw x; //抛出异常 return x / y;}int main(){ try { //可能发生异常的调用写在try里 cout << "5 / 2 = " << divede(5, 2) <&原创 2021-08-25 16:43:40 · 192 阅读 · 0 评论 -
7.24C++:迭代器、输入/出流迭代器、迭代器分类及功能、迭代器的区间、通过迭代器排序、迭代器的辅助函数
1 迭代器迭代器是算法和容器的桥梁迭代器用作访问容器中的元素算法不直接操作容器中的数据,而是通过迭代器间接操作算法和容器独立增加新的算法,无需影响容器的实现增加新的容器,原有的算法也能适用2 输入/出流迭代器输入流迭代器istream_iterator<T>istream_iterator<int>(cin) //以标准输入(cin)作为参数,将键盘输入int类型数据读入到输入流以输入流(如cin)为参数构造可用*(p++)获得下一个输入的元素输出流迭原创 2021-07-25 00:17:44 · 547 阅读 · 4 评论 -
6.6C++: 指向一维数组的指针就是指向指针的指针,动态内存分配返回的是指针
1 指向一维数组的指针就是指向指针的指针动态内存分配返回的是指针,相当于降了一级,解引相当于升了一级指向数组的指针和指向数组元素的指针是有区别的,指向数组的指针解引得到数组,指向数组元素的指针解引得到数组元素,如下图指向二维数组元素的指针,就是指向一维数组的指针。动态生成二维数组,通常使用指针+下标访问数组元素int** a; //int类型的指向指针的指针a = new int*[3];//第一次动态内存分配,生成一个指针数组,每个数组元素都将指向一个一维数组的首地址,也就原创 2021-06-21 00:07:22 · 557 阅读 · 0 评论 -
6.13C++:双目运算符重载为成员函数、单目运算符重载函数、运算符重载为成员函数时,左操作数必须是这个类的对象
1 双目运算符重载为成员函数如果要重载 B 为类成员函数,使之能够实现表达式 oprd1 B oprd2,其中 oprd1为A 类对象,则 B 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的类型。 (B是双目运算符+、-、*、/等)经重载后,表达式 oprd1 B oprd2 相当于 oprd1.operator B(oprd2)#include <iostream>using namespace std;class Complex {public: C原创 2021-06-14 00:38:21 · 2163 阅读 · 1 评论 -
6.3C++:C风格字符串(包含常见错误,char数组与其他数组的区别、char数组的使用)、string类、getline
1 C风格字符串char类型数组,输出数组名不是一个地址,而是字符串,但注意数组长度应比数组成员数+1。int main(){ char a[5] = {'h', 'a', 'p', 'p', 'y'}; cout << a << endl; return 0;}输出结果:happy烫烫烫藺锡`跟int main(){ char a[6] = {'h', 'a', 'p', 'p', 'y'}; cout << a << endl;原创 2021-06-04 00:15:46 · 159 阅读 · 0 评论 -
5.30C++:指向一维数组的指针、左值与右值,返回封装数组元素的引用
指向数组的指针参考此篇文章:C语言之指向一维数组的指针int array[5] = {1, 2, 3, 4, 5}; // 定义数组int (*ptr)[5] = &array; // 定义指向数组的指针指针都是指向一种类型。所谓类型, 不过是对内存中数据的解释的约定。对于int a[5] ,可以将 具有5个int元素的数组认为是一种类型,这种类型在内存上的特点是连续存储5个整形数据。例如 int (*ptr)[5] ,ptr这个指针就是指向这种类型的指针,ptr是一个指向数组的指针原创 2021-05-31 00:09:11 · 592 阅读 · 1 评论 -
6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数
1 继承基类的构造函数class A{public: A(){}; // A的构造函数};class B : public A{public: using A:A;}2 单继承的构造函数class A{public: A(int i){};};class B : public A{public: B(int i, int j): A(i), bb(j); /i传递给A的构造函数,j初始化bbprivate: int bb;};3 多继承的构造函数派生类的构原创 2021-06-13 00:38:29 · 483 阅读 · 2 评论 -
6.17C++:引用、重载单目运算符返回引用
1 引用引用初始化必须是左值,只能是++a,不能是a++void fun(int& a){}; //此过程相当于int& a = b;int main(){ int b; fun(b);}int main() { int a = 1; int& b = ++a; // b是a的引用, a=2, b=2 int& b = a++; //error,引用的初始值必须是左值 cout << b << endl; b = 5; co原创 2021-06-20 22:57:19 · 161 阅读 · 0 评论 -
6.1C++:浅层复制、深层复制、防止默认复制发生
参考:C++拷贝构造函数详解浅层复制所谓浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝”已经能很好地工作了,但是一旦对象存在了动态成员,那么浅拷贝就会出问题了,让我们考虑如下一段代码:class Rect{public: Rect() // 构造函数,p指向堆中分配的一空间 { p = new int(100); } ~Rect() // 析构函数,释放动态分配原创 2021-06-02 00:07:40 · 332 阅读 · 0 评论 -
5.16C++: 枚举类
枚举类的定义:默认底层类型为int类型枚举类的优势:原创 2021-06-21 00:08:07 · 92 阅读 · 0 评论 -
6.7C++ :类的继承与派生:公有继承
1 类的继承与派生三种继承方式:公有继承、私有继承、保护继承公有继承:class A : public B {}公有继承最为常见,要使用基类的私有成员一般通过接口访问。例子:point.h文件里有一个Point类,作为基类//Point.h#ifndef _POINT_H /防止多次定义,宏全大写,命名无所谓,最好与文件名保持一致#define _POINT_H#include <iostream>using namespace std;class Point {publ原创 2021-06-08 00:11:05 · 417 阅读 · 1 评论 -
5.29C++:对象指针、this指针、动态内存分配、重点:数组与指针!!!
1 对象指针Poina a(2,3);Point* ptr = &a;通过指针访问对象成员ptr->getx() == (*ptr).getx2 this指针this指针隐含于类的每一个非静态成员函数中用a.getx()函数时,对象a的地址传给了getx()函数中的隐藏的this指针3 动态内存分配new 类型名T(初始化参数列表)程序执行期间,申请用于存放T类型对象的内存空间,并依据初始化列表赋以初值。结果值:成功:T类型的指针,指向新分配的内存单元,指向首原创 2021-05-30 01:32:05 · 304 阅读 · 0 评论 -
6.19C++:函数模板、类模板、模板传参数
1 函数模板原创 2021-06-20 22:56:21 · 181 阅读 · 0 评论 -
5.31C++:vector、基于范围的for循环配合auto、传递引用;vector对象名不能当做数组的头指针使用
1 vector类模板:容纳任何类型的容器定义vector可以封装任何类型的动态数组,自动创建和删除数组下标越界检查定义:vector<元素类型> 数组对象名(数组长度);例:vector arr(5),建立大小为5的int数组,(动态分配内存,自动删除,越界检查)实例vector<double> arr(n); //创建元素个数为n的数组对象vector<int> v = {1, 2, 3}; //创建这条语句生成一个类,专门用来存放doubl原创 2021-06-01 00:14:23 · 1224 阅读 · 3 评论 -
6.15C++:虚函数、构造函数不可以为虚函数、虚析构函数、虚函数实现多态、虚函数中默认参数、基类虚函数不能是私有函数、虚函数对象调用可内联,指针/引用调用不能内联
1 虚函数虚函数可以实现运行时的多态,在运行时觉得调用哪个函数体;虚函数必须是非静态的成员函数,虚函数是属于对象的,不是属于整个类的,需要在运行时通过指针定位到指向的对象,然后决定调用哪个函数体;虚函数经过派生之后,就可以实现运行过程中的多态;构造函数不能是虚函数,析构函数可以;虚函数virtual只能出现在类定义的函数原型声明中,而不能在成员函数实现的时候;虚函数不能是内联函数,因为对虚函数的调用需要动态绑定,而对内联函数的处理是静态的#include <iostream>原创 2021-06-16 00:03:16 · 442 阅读 · 1 评论 -
6.13C++:访问从基类继承的成员、虚基类
1 访问从基类继承的成员无Base:: 限定时,访问派生类中同名成员派生类中无同名成员,存在二义性的成员用类名限定多继承时的二义性和冗余问题2 虚基类#include <iostream>using namespace std;class Base0 {public: Base0(int var) : var0(var) { } int var0; void fun0() { cout << "Member of Base0" << e原创 2021-06-13 18:36:56 · 155 阅读 · 0 评论 -
6.14C++:运算符重载注意事项 、运算符重载为类外的非成员函数
运算符重载注意事项C++ 几乎可以重载全部的运算符,而且只能够重载C++中已经有的。不能重载的运算符: “.”、“.*”、“::”、“?:”重载之后运算符的优先级、结合性、操作数个数、语法结构都不会改变。重载为类的非静态成员函数、或非成员函数基础数据类型之间的操作符无法重载,例如Point operator + (int, int)1 运算符重载为类外的非成员函数cout << a << b①operator << (cout, a) 即cout &l原创 2021-06-14 17:02:32 · 270 阅读 · 0 评论 -
5.28C++: 指针做函数参数,指针类型的函数,指向函数的指针,当数组名作为函数参数时,退化为指针
1 指针作为函数参数void (const int* a){...}int main(){ int array; void(array)指向常量的指针做形参,指针指向的内容不可修改2 指针类型的函数形参是指针,实参可以是指针/地址;函数返回值是指针,可以返回一个指针/地址。int* fun(int* a)不要用非静态局部地址作函数的返回值,函数里的局部变量作用域和寿命都仅存在于函数体内,函数结束内存空间释放,返回的指针也无意义。返回主函数中合法、有效的地址:例如在主函数中原创 2021-05-29 00:29:51 · 220 阅读 · 0 评论 -
6.12C++:公有继承、私有继承、保护继承、基类与派生类类型转换
1 私有继承基类的public和protected --> private2 保护继承基类的public和protected --> protected原创 2021-06-12 17:23:16 · 167 阅读 · 0 评论 -
5/8:若函数定义在调用点之后,需要声明、 随机数
C++:1.若函数定义在调用点之前,可以不另外声明int fun(int x){ .... }int main(){ fun(5); }若函数定义在调用点之后,需要声明int main(){ int fun(); fun(5); }int fun(int x){ .... }2.#include 中的rand()rand()%6 + 1 即为1-6的随机数需要先srand(seed),给一个种子。种子相同时,随机数也相同。...原创 2021-06-21 00:08:48 · 150 阅读 · 0 评论 -
6.2C++: 动态构造的返回值是一个 指针类型 、移动构造
1 移动构造原创 2021-06-03 22:59:02 · 241 阅读 · 0 评论 -
6.17C++:虚表、抽象类、override与final
1 虚表含有虚函数的类有一个指向虚表的指针,这个指针占8个字节(64位编译器)虚指针->虚表->虚函数入口2 抽象类virtual void display() const = 0;const表示成员函数隐含传入的this指针为 const指针,在该成员函数中,任意修改它所在的类的成员的操作都是不允许的纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需要定义自己的版本。含有虚函数的类是抽象类,抽象类不能定义对象。抽象类的作用是作为基原创 2021-06-17 23:35:00 · 98 阅读 · 0 评论 -
5.19C++:标识符、关键字、多文件结构、exter、编译预处理
标识符:标识符是C程序的最基本组成部分,例如:变量名称、函数名称、数据类型等等,都是一个标识符。标识符的要求是:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字符不可以是数字。例如:abc — 合法_abc123 — 合法abc555 — 合法123abc — 非法abc$!! — 非法 在C语言中,大写字母和小写字母被认为是不同的字符,所以,ABC与a原创 2021-05-19 23:44:09 · 214 阅读 · 0 评论 -
5.10C++:友元、常类型:常对象、常成员、常引用
1 友元函数、友元类友元关系是单向的,A是B的友元,A可以单向访问B类的private成员和protected成员,B不能访问A。class A{ friend class B; ...}class B{}#include <iostream>#include <cmath>using namespace std;class Point { //Point类定义public: //外部接口 Point(int x = 0, int y = 0) : x(原创 2021-05-19 00:00:30 · 119 阅读 · 0 评论 -
5/10 C++ :引用类型双向传递,inline内联函数
实参-形参 单向传递内联函数:inline关键字原创 2021-05-10 23:59:54 · 124 阅读 · 0 评论