logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

从零了解Vector详细解析

注意: vector 内存连续,删除中间元素后,后面所有元素必须向前移动补齐空位,时间复杂度 O (n);编译不会报错,运行时不会抛出异常,直接访问非法内存 → 未定义行为 (UB),程序可能随机崩溃、乱改内存。注意:vector 内存连续,插入中间位置,后面所有元素向后移位,效率低 O (n)而string会缩容:重新分配更小的内存 + 拷贝数据 + 释放旧的大内存。(操作系统的堆内存管理规则是

文章图片
#c++#数据结构
C++哈希相关遇错

HashTable模板写在了Equal_to定义的前面!// 顺序错误!当编译器读到HashTable的模板参数时,Equal_to这个名字还没定义,所以直接报错。正确的代码顺序必须先定义Equal_to,再定义HashTable补充:模板的 “前向声明”如果不想调整顺序,也可以给Equal_to// 前向声明,告诉编译器 Equal_to 是一个模板 struct。

文章图片
#前端#c++
Linux体系架构与权限管理全解析

如果已经确定用户是拥有者,那么即使他同时也是所属组有拥有者没有的权利,那也是摆设。Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“ ,但我们⼀般⽤⼾,不能直接。如:安装软件,安装到系统中,需要管理员root权限(只安装了一份,允许所以用户同时使用)Linux中的用户:root用户(超级管理员,权限高)or 普通用户(权限低,受管控)技术本质:提供计算,存储,网络的硬件资源

文章图片
#linux#运维#服务器
揭秘前K个高频单词的堆排序实现(优先队列)

参数为要比较的元素类型pair<string,int>,而非vector<pair<string,int>>;对象(a,b) === 自动变成 ===> 对象.operator()(a,b)不管你是 less /greater、大顶堆 / 小顶堆参数顺序完全不用改!(第一个位置是类模板,第二个是函数模板)这就是仿函数的本质:结构体对象.operator ()(参数)注意这样不会改变传过来的实参,因

文章图片
#算法#数据结构#c++
C++类与对象:从定义到内存模型全解析

class为定义类的关键字,stack为类的名字,{}中为类的主体(注:类定义结束后面有分号)类的成员:类中的变量称为类的属性(成员变量)类中的函数称为类的方法(成员函数)作用域 = 一个名字(变量 / 函数 / 类)能被 “看见” 的代码区域。不同的作用域有不同的 “可见范围”,出了这个范围,名字就失效了,编译器就找不到它了成员函数代码全局唯一,存在代码区,所有对象共用所以所有对象的成员函数指针

文章图片
#开发语言#c++
C语言队列初始化常见问题解析

抽象 vs 实现Queue是队列的抽象接口,面向使用者(mainQNode是底层实现细节,面向开发者(写队列函数的人),使用者无需感知;封装的意义:创建Queue而非QNode,能让你聚焦 “队列的功能”(入队、出队),而非 “节点的管理”(创建、串联、释放),降低使用复杂度;操作入口Queue是所有队列操作的唯一入口(封装了头尾指针和长度),直接操作QNode会失去队列的管理逻辑,导致数据结构混

#开发语言#c语言
刷题遇到的问题1月2

答:不是哪怕把count先定义,只要用的是固定大小的栈数组,且数组大小大于输入的m*n,依然可能出错。这不是 “谁先定义” 的问题,而是栈内存的连续性 + 指针偏移遍历的 “盲目性”+ 编译器内存优化假设你修改代码,把countint main()// 先定义countint m, n;int i, j;int* p;// 后定义的大数组(25个int)// ...栈底(高地址) → count

#算法
到底了