Linux命令不是一组孤立的背诵题。ls、find、grep、重定向和管道共同构成数据处理流程;用户、组、文件权限和目录权限则决定这些流程能否访问目标对象。
本文从Shell、路径和目录树讲起,系统整理文件操作、查看、查找、压缩、系统信息与帮助命令,并深入解释rwx、八进制权限、umask、所有者、用户组、目录删除条件和粘滞位。所有危险命令都会明确边界,避免 ...
学习Linux首先要获得一个稳定、可重复、敢于实验的环境。环境选择并不存在唯一答案:WSL2启动快,虚拟机隔离完整,云服务器适合远程开发和项目部署,物理机则提供最直接的硬件体验。
本文从Linux、内核和发行版的关系讲起,对比常见搭建方式,给出云服务器初始化、普通用户与sudo、SSH密钥登录、客户端配置和安全检查流程,并提供一份无修改操作的环境自检脚本。
...
C++把输入输出抽象为“流”:程序按照顺序从流中提取数据,或把数据插入流。键盘、终端、文件和内存字符串虽然介质不同,却可以使用相似的状态、格式和运算符接口。
本文从流与缓冲区讲起,系统整理cin、cout、cerr、clog、文件流和字符串流,并重点解释输入失败后的状态恢复、>>与getline混用、文本和二进制文件差异,以及原始结构体二进制写入 ...
模板初阶解决“同一份逻辑适配不同类型”,模板进阶则开始解决两个更精细的问题:把编译期常量也作为参数,以及为特定类型或类型形态选择更合适的实现。类型萃取、标准容器、智能指针和泛型算法都大量依赖这些机制。
本文以C++11为主要标准,系统讲解非类型模板参数、函数模板特化、类模板全特化与偏特化、类型萃取和模板分离编译,并纠正常见的术语与版本差异。
一、模板参数 ...
stack、queue和priority_queue不以完整容器接口呈现,而是通过限制底层容器的操作,分别形成后进先出、先进先出和按优先级访问的数据结构。理解它们的关键是“容器适配器”:存储工作由底层容器完成,适配器负责提供受约束的接口和语义。
本文系统介绍三种适配器的接口、复杂度、底层容器要求、比较器规则、deque结构,以及最小栈、逆波兰表达式和第K大元 ...
std::list是节点式双向链表。它不提供随机访问,却能在已知位置以常数复杂度插入、删除和转移节点,并且结构修改通常不会让其他节点的迭代器失效。
本文从list的接口与复杂度讲到哨兵节点、双向迭代器和迭代器失效,并与vector进行工程化比较。文末通过一个教学版双向链表展示节点链接、插入、删除和迭代器封装。
一、list的结构与特点std::list& ...
std::vector是C++最常用的序列容器。它以连续内存保存元素,兼具随机访问、良好缓存局部性和摊销常数时间尾插。真正掌握vector,不仅要会调用push_back,还要理解size与capacity、扩容、元素搬移、迭代器失效以及为什么不能用memcpy复制一般对象。
本文从常用接口讲到实现原理,并给出一个基于分配器的教学版动态数组,以观察原始存储、 ...
std::string把字符序列、动态存储、长度管理和常用字符串操作封装在一个值类型中。它比C风格字符数组更容易复制、拼接、查找和传递,但仍需正确理解size、capacity、reserve、resize、c_str以及迭代器失效等规则。
本文系统整理std::string的构造、遍历、容量、修改、查找、截取、输入和C接口兼容方式,并通过一个教学版字符串类 ...
