摘要:
参考《Linux C编程一站式学习》 1. 基本规则 如要编译、链接main.c, stack.c, maze.c, 最终生成可执行文件main。 用手动输入gcc命令方式: $gcc main.c stack.c maze.c -o main 如果有单个文件修改,还执行上面的命令,会全部.c文件都 阅读全文
摘要:
Linux控制台输入 $ man open 出现的是openvt的信息,要怎么办? 可以为man命令添加-a选项,按q退出后输入open $ man -a open #该命令的含义是,可以分页显示所有可能的查找目标文档,再进行查询 man -a intro 正确执行时显示手册中包含的所有可用的 in 阅读全文
摘要:
1. 用户和权限 Linux规定了4种不同类型用户: 文件主 owner; 同组用户 group; 可以访问系统的其他用户 others; 超级用户 root,具体管理系统的特权,拥有所有权限; 用户有3种访问文件/目录的方式的权限类型:读权限 r,写权限 w,可执行/查找权限 x。只有用户具备对应 阅读全文
摘要:
本章介绍4个标准库设施:tuple, bitset, 随机数生成, 正则表达式。还有IO库具有一些特殊目的的部分。 17.1 tuple类型 头文件:tuple tuple 元组,类似于pair的模板。联系是pair的成员类型都可以不一样,区别是pair恰好有2个成员,而tuple可以有任意数量成员 阅读全文
摘要:
equal函数 equal也是C++ STL模板函数,用于比较指定的2个迭代器范围元素是否完全相等。 比较方式:==(判断相等的符号,要求迭代器指向元素支持),或者指定的谓词pred 返回值:只有[first1, last1)所有元素都与[first2, last2)所有元素都相等时,才返回true 阅读全文
摘要:
1. static_assert static_assert静态断言,是C++关键字,作用是让编译器在编译期对常量表达时进行断言。如果通过,就不报错;如果不通过,就报错 用法: static_assert(常量表达式, 错误提示信息); 常量表达式的值为true或者false,或者可以转化为true 阅读全文
摘要:
delete有2个作用: 释放new分配的动态内存; 阻止编译器自动合成函数; 释放new分配的动态内存 delete需要与new配对使用,其参数可以是指向一块内存首地址或空指针(nullptr)。不能对同一块内存多次delete,但是可以对空指针多次delete。 注意delete和delete[ 阅读全文
摘要:
提到const和constexpr,就需要引入常量表达式。常量表达式是指值不会改变,并且编译过程就能得到计算结果的表达式。 ⇒ 编译阶段就能得到值,并且不能改变。 const修饰对象无法修改,constexpr更侧重于修饰对象编译期确定且无法修改。具体区别,体现在以下两个方面: 修饰变量 const 阅读全文
摘要:
右值引用和左值引用有什么区别? 右值引用,是只能绑定到右值的引用,通过&&获得,只能绑定到即将销毁的对象上(如字面量,临时计算结果,函数返回值,无名对象)。通过右值引用可以自由地移动绑定的资源。 返回右值的包括非引用类型的函数及算术、关系、位、后置递增/递减运算符。 右值引用的对象是短暂的,即将销毁 阅读全文
摘要:
12.1 动态内存与智能指针 new, delete运算符:动态申请,释放内存; 智能指针:shared_ptr,unique_ptr,weak_ptr,由标准库提供,头文件 memory 12.1.1 shared_ptr类 允许多个指针指向同一个对象。默认初始化的shared_ptr指针为空指针 阅读全文
摘要:
C++中,复制C风格字符串的方法有4种:strcpy, strncpy, strcpy_s, strncpy_s。它们有什么区别和联系了? 1. strcpy strcpy和strncpy是早期C库函数,头文件string.h。现在已经发布对应safe版本,也就是strcpy_s, strncpy_ 阅读全文
摘要:
10.2 初识泛型算法 10.2.1 只读算法 find 头文件algorithm find 在指定迭代器范围种,查找目标元素。返回第一个出现目标元素的迭代器。 支持容器类型,也支持内置数组。要求元素支持“==”运算符。 // 1. 在list中查找指定元素 list<string> lst; // 阅读全文
摘要:
第9章 顺序容器 容器是指什么? 一个容器指的是一些特定类型对象的集合。 9.1 顺序容器概述 顺序容器,sequential container,提供了控制元素存储何访问顺序的能力,顺序取决于元素加入容器时的位置,与元素值无关。 标准库提供了3种容器适配器,分别为容器操作定义了不同的接口,来与容器 阅读全文
摘要:
C++不直接处理输入输出(IO),而通过一组标准库中定义的类型来处理IO。如istream, ostream等类。 已介绍常用IO库: istream 输入流类型,提供输入操作 ostream 输出流类型,提供输出操作 cin istream对象,从标准输入读取数据 cout ostream对象,从 阅读全文
摘要:
4.11 类型转换 相互转换 conversion,如果两种类型可以相互转换,那么它们是关联的。 例如,下面的表达式,ival会初始化为6 int ival = 3.541 + 3; 编译器会自动将int类型3转换为double类型3.0,然后让3.541 + 3.0得到6.54,再转换为int类型 阅读全文
摘要:
ArrayList底层是数组elementData,用于存放插入的数据。初始大小是0,当有数据插入时,默认大小DEFAULT_CAPACITY = 10。 /** * The array buffer into which the elements of the ArrayList are stor 阅读全文
摘要:
byte存储范围,表示范围 我们知道byte代表1个字节,数据存储的范围:[0x00, 0xFF]。byte变量表示值的范围:[-128, 127]。 下面这段代码并不是输出128,而是输出-128,因为byte变量表示值的范围为[-128, 127]。128刚刚好超出上界127有1单位,溢出为-1 阅读全文
摘要:
前导0计数 问题 1的前导0个数为31,对应16进制数为0x0000 0001。 2的前导0个数位30,对应16进制数为0x0000 0002。 如何计算一个int型数对应二进制数前导0的位数呢? 解决思路 轮询bit位算法 开始想到的最简单的办法是从左边最高位开始,向低位轮训,一直到遇见位1。 / 阅读全文
摘要:
代理模式(Proxy Pattern) 简介 一个类代表另一个类的功能。创建具有现有对象的对象,以便向外界提供功能的接口。 意图 为其他对象提供一种代理以控制这个对象的访问。 特点 主要解决:在直接访问对象时带来的问题,比如说,访问的对象在远程的机器上,在面向对象系统中,有些对象由于某些原因(比如对 阅读全文
摘要:
享元模式 flyweight pattern 简介 主要用于减少创建对象的数量,以减少内容占用和提高性能。 尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 意图 运用共享技术有效地支持大量细粒度的对象。 特点 主要解决:在有大量对象时,有可能会造成内存溢出,把其中共同的部分抽象出来,如 阅读全文