【C++】第九节:list 此处大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点无效,即该节点被删除了。因为 list 的底层结构为带头结点的双向循环链表,因此在 list 中进行插入时是不会导致迭代器失效的,只有删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。
【数据结构】排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在r[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
【C++】第八节:vector 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector 的迭代器就是原生态指针 T*。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃。当 *it 等于偶数时,调用 v.erase(it) 并将返回的迭代器赋值给 it,因此,即使元素被删除,it 也会被更新为指向下一个有效元素,避免了无效的迭代器访问。以下代码的功能是删除 vector 中所有的偶数,哪个代码是正确的?
【Linux】进程控制 在 linux 中 fork 函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程返回0,父进程返回子进程 id,出错返回-1。fork 之前,只有一个进程在运行。用户空间是指用户应用程序运行的区域,内核空间是操作系统核心部分运行的区域。fork 之后,系统创建了一个新的子进程。fork 之前,父进程在用户空间中运行。父进程调用 fork() 后进入内核空间。fork 之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。
【C++】第五节:内存管理 int main()// new/delete和malloc/free最大的区别是// new/delete对于自定义类型除了开空间还会调用构造和析构函数free(p1);delete p2;// 内置类型几乎是一样的free(p3);delete p4;free(p5);return 0;_size++;~Stack()
【C++】第三节:类与对象(中) 如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。
【C++】第二节:类与对象(上) / 类体:由成员函数和成员变量组成// 分号不能忘记class 为定义类的关键字,ClassName 为类的名字,{} 中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为成员变量;类中的函数称为成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。// 人public:public:int _age;
【C++】第一节:C++入门 / 1. 命名空间定义// 命名空间中可以定义变量/函数/类型int val;// 2. 命名空间可以嵌套int a;int b;int c;int d;// 3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成在同一个命名空间中// 一个工程中的test.h和上面test.cpp中两个N1会被合并成一个// test.h注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
【Linux】Linux环境基础开发工具使用 vim的三种模式,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。正常/普通/命令模式:插入模式:末行模式:在命令模式下,即可进入该模式。
【数据结构】栈和队列(有完整的模拟实现代码!) 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,。出栈:栈的删除操作叫做出栈。。
【C语言进阶】第七节:程序环境和预处理 _FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。#define reg register//为register这个关键字,创建一个简短的名字不要在最后加分号,容易导致问题,例如:max = MAX;分号书写:当定义的内容较长时,可以通过反斜杠 \ 进行续行。