水水水
数据结构(数组模拟,用静态链表而不是动态链表是因为其效率相对较高)链表与邻接表单链表·(邻接表:存储图和树)首先用数组e[n]表示某点的值,ne[n]表示某点的next指针,二者靠下标关联,空节点下标设为-1 //值 3 5 7 9 head -> O -> O -> O -> O -> 空节点 //下标 0 1 2 3 -1 e[0] = 3, e[1] = 5, e[2] = 7, e[3] = 9 en[0] = 1,ne[1] = 2,ne[2] = 3,ne[3] = -1 const int N = 100010; //head表示头节点的下标 //e[i]表示节点i的值 //ne[i]表示节点i的next指针 //idx 储存当前已经用到了哪个点 int head,e[N],ne[N],idx; //初始化 void init(){ head = -1; idx = 0; } //将x插到头节点 void add_to_head(int x){
MySQL #SQL1.创建数据库使用下面的语句来创建一个名称为sql_tutorial的数据库CREATE DATABASE `sql_tutorial`;还可以展示所有的数据库SHOW DATABASES;选择使用数据库:USE `sql_tutorial`;一个数据库中包含多个表格table,可将表格中的属性设置为key,由此可以让表格之间产生关联其中,primary key(主键)可以唯一表示某一条数据,而foreign key(外键)可以对应到另一张表格的primaryk key同一个表格可以有多个primary key,因为数据可能相同,需要多个属性才能唯一确定一条数据,例如下面的表格emp_idclient_idtotal_sales206400700002074012400020840098002084032400021040487940-- 使用下面的语句创建表格 CREATE TABLE `student`( `student_id` INT AUTO_INCREMENT, `name` VARCHAR(20) NOT NULL, `majo
修正C++使用习惯避免使用using namespace std避免在循环中使用std::endl它做的不仅仅是换行,还有刷新缓存区,这需要更长的时间。所以使用换行符"\n"即可避免使用基于索引的for循环,而是选择跟能表达意图的range based loopfor(const auto &x: data) { }当存在已有标准算法可以完成要解决的任务时,避免自己写循环实现例如使用std::find_if()而不是自己写遍历查找避免在可以使用标准数组的地方使用C风格数组,C分割数组通常会退化成指针,并且需要传递数组的长度以及数组本身不了解字符串字面值的生命周期const char *string_literal_lifetimes() { return "string literals"; }像这样的字符串字面值被保证具有与程序相同的生命周期,这样不用担心他在函数返回后会被销毁使用结构化绑定下面是一个颜色名称和十六进制值的映射 然后遍历所有的键值对,并打印十六进制值void loop_map_items() { std::unorder
三Cpp的对象生存期(栈作用域生存期)简言之,在作用域内在栈上创建的变量会在作用域结束时被销毁。对于在堆上创造的变量,也可以通过构造函数和析构函数自动删除。Cpp的智能指针智能指针本质上是一个原始指针的包装,当你创建一个智能指针,它会调用new为你分配内存,然后基于你使用的智能指针,这些内存会在某一时刻自动释放。首先是最简单的unique_ptrunique_ptrunique_ptr是作用域指针,是超出作用域时,它会被销毁,然后调用delete。之所以叫unique_ptr,是因为你不能复制一个unique_ptr,如果你复制一个unique_ptr,那么你会有两个指针,两个unique_ptr指向同一个内存块,如果其中一个被销毁,他会释放那段内存,那么指向同一块内存的第二个unique_ptr指向了已经被释放的内存,所以不能复制unique_ptr。example:class Entity { public: Entity() { std::cout << "Creaded Entity"
admin