08 2022 档案
摘要:定义与区别 左值 (lvalue, locator value) 表示了一个占据内存中某个可识别的位置(也就是一个地址)的对象。即左值指的是可以取地址的变量。 区分表达式的左右值属性有一个简便方法:若可对表达式用 & 符取址,则为左值,否则为右值。 左值与右值的根本区别在于能否获取内存地址,而能否赋
阅读全文
摘要:new和malloc的内存分配在哪 分配在堆上。 也有说new是分配在自由存储区而malloc分配在堆上,自由存储区可以是堆也可以不是,具体要看new内部的实现。 操作系统在堆上维护一个空闲内存链表,当需要分配内存的时候,就查找这个表,找到一块内存大于所需内存的区域,分配内存并将剩余的内存空间返还到
阅读全文
摘要:《C++ primer》中有一句 因为引用本身不是对象,所以不能定义引用的引用。 int i = 1024; int &a = i; int &b = a; 容易引起误解,语句int &b = a;并没有语法错误。 可以这么理解: int &a 给i起了一个别名a; int &b 给i起了另一个别名
阅读全文
摘要:引用 C++11中新增了“右值引用”,主要用于内置类,当我们使用术语“引用”时,指的是“左值引用”。 引用(reference)为对象起另一个名字,即别名。 引用不是对象,只是已经存在对象的另一个名字。定义一个引用时,必须将引用与它的初始值绑定在一起,且一直绑定在一起,无法令引用重新绑定到另外一个对
阅读全文
摘要:const对象必须初始化,因为const对象一旦创建后其值就不能改变。 默认情况下,const对象仅在文件内有效 在一个文件中定义const,在多个文件中声明并使用,解决办法:对于const变量不管是声明还是定义都添加extern关键字。 把引用绑定到const对象上称为对常量的引用(referen
阅读全文
摘要:指针 与引用类似,指针也是实现了对其他对象的间接访问 指针本身就是一个对象,占据内存空间,允许对指针进行赋值和拷贝,指针的生命周期可以先后指向几个不同的对象。 指针无须在定义时赋初值,与其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。 空指针 生成空指针的方法: i
阅读全文
摘要:刷剑指offer遇到元素排列问题 No27 字符串的排列 函数使用 题目描述: 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 解题
阅读全文
摘要:先说结论: ==没有区别== length()是因为沿用C语言的习惯而保留下来的。 string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。 源代码: size_type __CLR_OR_
阅读全文
摘要:No1 二维数组中的查找 牛客网原题链接 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1,2, 8, 9], [2,4, 9,12],
阅读全文
摘要:没有返回类型的指针称为空指针。它可以是任何类型的数据类型。 void指针是一种不明确类型的指针,任何指针都可转为void指针 void指针只保存了指针两个重要信息其中的一个,即只存储了指针目标的内存首地址 若需要对void指针操作,先将void指针指向原先指向的类型 下面看代码 #include <
阅读全文
摘要:智能指针是行为类似于指针的类对象,可以将new获得(直接或者间接)的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete来释放内存。因此,如果将new返回的地址赋给这些对象,将无需记住稍后释放这些内存:在智能指针过期时,这些内存将自动被释放。 shared_ptr<double>pd;
阅读全文
摘要:C++11 新引入了emplace()/empalce_front()/empalce_back()三个操作,对应了insert()/push_front()/push_back()操作。 不同之处是: insert是进行拷贝操作,而emplace是直接在容器的内存空间中进行构造一个对象。 这可以提
阅读全文
摘要:##QMainWindow QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个停靠部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如
阅读全文
摘要:Lanbda表达式 C++11中的Lambda表达式用于定义匿名的函数对象,以简化编程工作。 首先看一下Lambda表达式的基本构成 [capture](parameters)opt -> retType { ...... } [局部变量捕获列表](函数参数)函数额外属性设置opt 函数返回值->r
阅读全文
摘要:##项目创建 注意: 项目创建,名称和路径不能包含中文路径。 创建窗口三大基类 QWidhet QMainWindow QDialog 1.1 项目文件介绍 mian.cpp 介绍 #include "mywidget.h" #include <QApplication> // QApplicati
阅读全文
摘要:(C++文件操作) 程序运行时产生的数据都属于临时数据,程序运行结束都会被释放 通过文件可以将数据永久化 C++中对文件操作需要包含头文件#include<fsrteam> 操作文件三大类: ofstream 写操作 ifstream 读操作 fstream 读写操作 一、文本文件 写文件 写文件步
阅读全文
摘要:C++数组输出 C++中输出数组数据分两种情况:字符型数组和非字符型数组 当定义变量为字符型数组时,采用cout<<数组名; 系统会输出数组中的字符,如 char arr[] = {'1', '2'}; cout << arr << endl ; //输出12 如果想输出字符数组的地址,则需要进行强
阅读全文
摘要:(VSCode用户配置--自用) 插件 自用扩展: C/C++ Code-runner Error Lens Atom One Dark Chinese中文简体 驼峰翻译助手 自用setting设置 { /*editor*/ "editor.fontFamily": "Consolas, '思源黑体
阅读全文
摘要:(ofstream 和 ifstream 详细用法) 导读 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O. stream这个类有两个重要的运算符:
阅读全文
摘要:(信号) linux 信号的机制 信号是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。 信号是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。 信号可以导致一个正在运行的进程被另一个正在运行的异步进程中
阅读全文
摘要:类内定义的枚举类型,在类外引用时需要在枚举类型前加上作用域。 案例: class A{ public: enum Day {Mon = 0, Tue, Wed, Thu, Fri, Sat, Sun}; }; A::Day today = A::Day::Fri;
阅读全文
摘要:在 C++ 中,vector 是一个十分有用的容器。它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的
阅读全文