自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 C++设计模式笔记(内附可运行代码示例)

高内聚,低耦合。

2024-07-30 20:47:27 995

原创 C++新经典笔记

Human(int);return 0;说明子类对象构造过程中先构造基类部分。

2024-04-01 14:42:59 1025

原创 Cmake菜谱读书笔记

1、cmakeList写查找。依赖cmake文件2、自己写find-package模块(FindZeroMQ.cmake文件)1、主要讲解通过execute_process运行一段python代码COMMAND会从当前正在执行的CMake进程中派生一个或多个子进程,从而执行一套命令。每个命令的输出通过管道进入到下一个命令中。1、wrap_BLAS_LAPACK_sources就是生成的目标OUTPUT${wrap_BLAS_LAPACK_sources} #绑定targetCOMMAND。

2024-03-22 16:37:33 845

原创 C++ 高级主题杂记(较冷门)

1、指针类型的转换,失败会返回0:2、引用类型的转换,失败只会抛异常:1、返回值类型是type_info或type_info的派生类。2、对数组或函数,结果是数组类型;对非类类型和不含虚函数的类,结果是静态类型;对含有虚函数的类,求值是动态类型(运行时获取)3、注意不要把对象写成了指针,正确的:错误的:1、主要讲具有继承关系的类如何实现相等运算符。1、通过typeid获取typeinfo

2024-02-28 14:26:41 181

原创 向上生长笔记

总结:有了技术突破或者新需求时,大家很乐观,借钱生产和消费,欠钱太多,玩法激进,或者叫杠杆率太高,等到银行意识到风险不再随意放款,加息,企业或个人还不上后就只能破产倒闭,遣散工人。人也是靠“链接”,比如认识人多了就可以各种玩法,还有大基建、移动互联网都是为了增加链接。4、大佬开挂的人生就是关系、廉价资金、内部信息 --通过高杠杆获取廉价资源,适合时候卖出去//大佬也会全球投资避险,不大可能全赔了。同理,留守儿童早早打工,只有体力出卖,闲暇只有游戏和抖音,想学点新东西也不会得到周围人的支持--低层次循环。

2024-02-28 11:40:35 832

原创 程序员的自我修养笔记

1、装载过程:1)fork一个子进程并execve()调用指定的elf文件;2)读取前128个字节,可以判断文件的格式和类型;3)根据文件类型搜索和匹配合适的可执行文件装载过程;1、分为内核空间(Linux为高地址的1GB)和用户空间1、每个系统调用对应内核源代码中的一个函数,以"sys_"开头2、系统调用可在程序中直接使用,c语言形式定义在"/usr/include/unistd.h"。

2024-02-19 20:32:00 1053

原创 初识SLAM

SLAM的作用想象一个叫小萝卜的机器人,小萝卜在未知环境走,肯定想让小萝卜在脑海中记住两件事:1. 我在什么地方?——定位。2. 周围环境是什么样?——建图。这就和我们逛一个旅游景点一样,我们会潜意识记得我们的走过的地方,其中就有定位和地图构建。在这里地图的意思就是周围环境,也不是像什么谷歌地图上的那种地图。但是我感觉建图不是必须的,在一个三维空间画出我们的行走轨迹就行了啊,不一...

2023-06-19 19:45:16 232

原创 虚析构函数

动机防止少删除派生类对象写法调用虚析构造成不合成移动操作管它合不合成,反正我又不敢用合成的

2019-04-27 22:26:38 345

原创 继承中的类作用域

引出Bulk_quote bulk;cout <<bulk.isbn()<<endl;静态类型决定由谁开始向上搜索Quote是Disc_quote的父亲,Disc_quote是Bulk_quote的父亲。在Disc_quote中加入以下函数。给出以下示例:bulkP从孙子代开始搜索,itemP从基类开始搜索。再次澄清名字查找规则...

2019-04-27 22:16:45 179

原创 继承中的访问控制

proteced例外派生类通过派生类对象访问受保护成员,不能通过基类对象访问受保护成员。三种继承方式public继承维持基类关键字不变。protected继承把基类里的pubulic设为protected。降级private继承把基类里的public和protected变为private。降级。派生类向基类转换的可访问性class A{}; class...

2019-04-27 21:40:14 511

原创 抽象基类

动机有时基类对象是完全没有意义的,比如动物类,或者DIsc_quote类,里面的net_price函数没有意义。这时可以在类里面包含纯虚函数来禁止创建对象。纯虚函数DIsc_quote类是一个通用概念,里面的net_price函数无意义,并且创建该对象也没意义。进化成抽象基类含有纯虚函数就不能见对象了。Disc_quote dis; //xxx,含有纯虚函数Bul...

2019-04-27 17:01:56 161

原创 虚函数

定不定义普通成员函数只要没用到可以不写定义,但虚函数只要在主函数被用到,所有父类和子类必须都定义该函数,因为编译器只有在运行时才能确定用到哪个函数。调用虚函数指针或引用运行时解析有两种类型:动态和静态。这里有动态类型和静态类型,只有在运行时才知道动态类型。Quote base;print_total(cout, base, 10); //调用Quote::net_...

2019-04-27 16:26:56 150

原创 基类和子类的类型转换

绑定例外一般指针和引用和要绑定的对象属于同种类型,但基类指针或引用的绑定是一个例外。静态类型和动态类型静态类型编译时就确定,动态类型是运行时查对象内存才知道。静态类型是Quote&,动态类型是运行时调用函数才知道。一致情况如果形参不是引用或指针,那么静态类型和动态类型一致类型转换基类向派生类直接转是不行的Quote base;Bulk_quote...

2019-04-26 22:45:47 1044

原创 基类和派生类

基类定义class Quote{public: Quote() = default; Quote(const std::string &book, double sales_price): bookNo(book), price(sales_price){ } std::string isbn(){ return bookNo;...

2019-04-26 22:01:26 259

原创 引用限定符

动机允许向右值赋值有时会出现不可思议的语句。string s1 = "aa";string s2 = "aa";s1 + s2 = "cc"; //左边是右值,也是对的无法阻止这种限制,就只能强制阻止了做法1.只能向左值赋值一些情况2.只能向右值赋值后面加&&就行。...

2019-04-22 23:16:15 739

原创 移动构造和移动赋值运算符

定义只是自动帮你调用析构。得自己确保写对这个函数。比如把指针指向清0,让移后源对象达到一个安全的可析构状态。strVec::strVec(strVec &&) noexcept:elements(s.elements), first_free(s.first_free), cap(s.cap){ s.elements = s.first_free = s.cap...

2019-04-22 23:02:46 727

原创 右值引用&&

动机对象之间的拷贝太费时,即将销毁的对象不必拷贝,仅仅移动就行。右值引用回忆左值是要用表达式的地址,右值是要表达式的值。左值引用是&,右值引用是&&。左值不能指右值,右值不能指左值。int i = 42;int &r = i;int &&rr = i; //xxx,右值不能指左值。int &r2 = i*2; /...

2019-04-22 21:42:06 395

原创 delete阻止拷贝

动机有时我们不想对象可拷贝,比如iostream对象,可能想到的方式是不去定义,但赋值运算符和拷贝构造函数编译器帮我们默认定义了。只能显式说明一下。struct noCopy{ noCopy() = default; noCopy(const noCopy&) = delete; noCopy& operator=(const noCopy&am...

2019-04-22 15:36:47 160

原创 拷贝、赋值和析构函数(稍微进阶)

拷贝构造函数基本形式注意形参类型是类类型,不能声明为explicit,因为有些地方需要隐式转换class Foo{public: Foo(); Foo(const Foo&);};合成拷贝构造函数你不声明构造函数,也会给你一个合成的。浅拷贝问题。调用时机1.非引用类型形参2.返回非引用类型3.使用{}初始化一个数组4.标准库容...

2019-04-19 12:23:55 205

原创 动态数组

构建方式1.原始的new,delete方式2.标准库的allocator类最好使用标准库,简单而且不易出现内存管理错误new方式1.[]里不用填常量,只要是整数就行int *p= new int[get_size()];2.返回的类型是指针而不是数组3.初始化方式int *p1 = new int[10]; //默认初始化,内置类型值未定义 int *p...

2019-04-17 10:56:36 82

原创 智能指针

动机帮助程序员自动释放申请的动态内存。智能指针也是模板类shared_ptrmake_shared函数一般通过次函数创建指向的对象,该函数还返回一个智能指针。注意参数一定要和该类型的某个构造函数一致。这样定义的话我感觉以后可以告别new了。shared_ptr<int> p3 = make_shared<int>(42);shared_ptr&l...

2019-04-16 22:40:51 116

原创 c++内存分类

静态内存存放局部static对象,类里的static成员,任何函数外定义的变量栈内存局部非static对象堆内存程序员手动分配的内存,发生内存泄露的根源地文字常量区const属性,不可改...

2019-04-15 15:58:25 125

原创 关联容器

分类(1)按map和set分;(2)按是否重复出现分;(3)按是否无序分。定义支持列表初始化map <string,size_t> word_count = {{"0",0}};set<int> exclude = {0, 1};关键字支持的类型(重要)1.定义内部比较函数必须类型定义比较的运算,比如要么是重载<,要么定义成员比较函...

2019-04-14 17:04:52 130

原创 5类迭代器

分类啥叫单遍扫描和多遍扫描?推测多遍扫描就是可以再建些迭代器的副本,来扫描,不影响本身。输入迭代器只读不能写,所以*iter 只能出现在=右边。咋保证呢?不能保存迭代器状态,只能单遍扫描。一个有意思的事问:*it++会导致任何其他的指向流的迭代器失效,啥意思?答:输入迭代器保存不了迭代器的状态。改变副本会影响本身。参考:C++输入迭代器为何只能用...

2019-04-13 16:11:15 340 1

原创 三种不一般的迭代器(插入迭代器,iostream迭代器和反向迭代器)

插入迭代器,iostream迭代器和反向迭代器都是迭代器的补充,是一种迭代器适配器,是一种泛型算法,不属于特定容器。插入迭代器back_interter调用容器的push_back()front_interter调用容器的push_front()inserter调用容器的c.insert(val, it)inserter的一个有意思地方0.先看支持操作1...

2019-04-13 12:23:28 209

原创 bind解救普通函数

动机老是用lambda表达式,也不行呀,得让普通函数也能适应一下标准库算法。形式auto newCallable = bind(callable, arg_list); //arg_list是给callable的参数用法普通函数如下,传不进find_if函数。bool check_size(const string &s1, const int &sz)...

2019-04-11 13:46:00 126

原创 算法的谓词(引入lambda)

谓词含义指可调用的表达式,作为算法的一个实参传进去。标准库算法用的谓词只有一元谓词(接受一个参数)和二元谓词实例通过定义一个可调用函数,作为参数传入sort函数。#include <iostream>#include <vector>#include <string>#include <fstream>#include ...

2019-04-11 12:29:30 302

原创 泛型算法

动机容器定义了自己的成员函数,但是很多操作都是通用的,可以通过一套算法。用于不同类型的容器,多好。#include<algorithm>#include<numeric> //一些数值泛型算法本质通过迭代器访问元素1.算法执行容器的操作,执行的是迭代器的操作,所以不会更改底层的容器的大小,即不会增加或删除元素。2.算法依赖容器元素类型的一些操作,比如...

2019-04-08 22:49:14 86

原创 顺序容器

何时迭代器失效如果向容器的插入和删除造成元素移动,迭代器就会失效;如果引起内存重新分配,那么就会全部失效。emplace_back和push_backpush_back调用的是拷贝构造函数,而emplace_back调用的是构造函数。c.emplace_back("1",2,3);c.push_back("1",2,3); //xxx,不支持c.push_back(Sal...

2019-04-08 18:34:49 77

原创 顺序容器概述

分类有vector,deque,list,forward_list,array,string。1. 容器构造函数有一个版本只接受一个容器大小参数,其采用的是类型的默认构造函数。如果没有默认构造函数,就得传递一个元素初始化器。vector<noDefault> v1(10,init);vector<noDefault> v2(10); //xxx,无法构造...

2019-04-08 16:41:30 78

原创 IO类

IO类型reaifstream和istringstream 继承自istream;ofstream和ostringstream继承自ostream。IO对象无法拷贝和赋值估计这里是禁用了拷贝和赋值函数,不能拷贝的连带作用是不能作为形参和返回值类型。#include <iostream>#include <vector>#include <st...

2019-04-05 23:00:45 137

原创 static成员

类定义class Account{public: static double rate(){ return interestRate; }private: static double interestRate; static double initRate() { return 1; }};doub...

2019-04-05 15:00:53 334

原创 explicit限制单参数构造函数的类型转换

动机只有一个参数的构造函数存在隐式类型转换的可能。比如如下构造函数:struct Sales_data{ Sales_data() = default; Sales_data(const string& s):bookNo(s){} //编译器也劝加上explicit,Single-argument constructors must be marked e...

2019-04-05 13:24:34 2786

原创 类里的一些特性

注意的几点1.可以在类里定义类型别名,受访问级别约束。class Screen{ public: typedef string::size_type pos;};class Screen{ public: using pos = string::size_type;};2.成员函数声明为inline时,声明和定义里有一个...

2019-04-03 21:50:31 116

原创 友元(非重点)

友元初步(7.2.1节)作用友元打破封装,注意友元不是成员,无视private的控制,更无视其他访问级别了。声明方法类里面加friend声明一次(仅代表声明访问权限,不是真正的声明),类外还要再声明一次。友元再探(7.3.4节)把其他非成员函数作为友元略把其他类作为友元友元类完全可以访问Screen类的所有成员。class Screen{ fri...

2019-04-03 12:30:19 73

原创 构造、拷贝、赋值、析构(初级)

构造基本内容不能声明为const原因是常量对象完成构造函数的初始化后才获得常量属性,在此期间构造函数可以操作常量对象,声明也没用。合成的默认构造函数假如我们没有显式定义任何构造函数,编译器将为我们合成一个默认构造函数来初始化我们的成员变量。初始化原则:1.有类内初始值的,按这些值初始化。2.没有的,按变量默认初始化方式(未定义的行为)。class A{ ...

2019-04-02 19:24:22 114

原创 const成员函数

this指针成员函数有个隐含的参数this指针,this是一个指向对象的常量指针。比如类型为Sales_data的对象的this指针形如Sales_data * const this;而在成员函数后加上const限定符后,this指针的含义发生了变化const Sales_data * const this;限制调用const成员函数只能被const对象,其他const...

2019-04-02 16:27:19 94

原创 函数指针(需精确匹配)

使用函数指针取址和使用都有两种方式#include <iostream>#include <vector>#include <string>using namespace std;bool lengthCompare(const string&, const string&){}bool (*pf)(const string...

2019-04-01 15:07:12 190

原创 函数匹配(需最佳匹配)

规则1、选择可行函数集2、寻找最佳匹配3、找到就结束,找不到二义性错误。void f();void f(int);void f(int,int);void f(double,double = 3.14);f(5.6); //f(int)最合适f(42, 5.6); //void f(int,int)和void f(double,double = 3.14) 都行。...

2019-04-01 14:13:39 413

原创 constexpr函数

定义constexpr函数的规则:1、形参和返回值类型都是字面值类型(基本类型)2、函数体有且只有一条return语句。constexpr int new_sz(){ return 42;}constexpr size_t scale(size_t cnt){ return new_sz()*cnt;}不一定返回常量表达式所有对象都是字面值常量,才...

2019-04-01 14:03:13 516

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除