学习笔记
kiki商
这个作者很懒,什么都没留下…
展开
-
std::void_t 一个神奇的类型(占坑)
这个类型太神奇了,我记得有一个youtube 的cpp 大会的视频,待整理原创 2021-04-11 16:19:05 · 359 阅读 · 0 评论 -
bash 函数使用
# 给函数传参的时候,直接将参数放在函数的右边就好了,不同参数以空格分割# 最好将参数放到“”,避免带空格的参数导致错误解析# 对应函数名后的参数位置,参数依次为 $1, $2, $3 … $n# $0 表示当前函数名# $# 表示参数数量# $* 和 $@ 表示传递给函数的所有参数,做参数转发的时候比较有用# * "$*" 或者“some $* some" 扩展为 "$1 $2 $n". 多个字符串被所见为一个字符串了,做参数转发的时候,不适用# * "$@..原创 2021-02-22 17:26:35 · 298 阅读 · 0 评论 -
c++-function-atoi
c++ atoi 设计与实现http://www.cplusplus.com/reference/cstdlib/atoi/转换一个string 为 数字声明:int atoi(const char* str);解析传入的c-string 内容,并转换其内容为整数,最终结果,以int 的形式返回。函数开始将丢弃尽可能多的空白字符(通过isspace判断),直到第一个非空白字符。之后,从这个字符开始,取一个可选的+或-符号,紧接着读取尽可能多的10进制数字,并转换为对应的数值。.原创 2021-02-18 20:33:15 · 506 阅读 · 0 评论 -
如何阅读代码(翻译理解)
原文:https://selftaughtcoders.com/how-to-quickly-and-effectively-read-other-peoples-code/最好的阅读和理解别人的代码的方法1. 找到一段代码,你理解这段代码实现的功能是什么,跟踪这个功能的实现流程比如,我们知道某段代码其功能是,创建一个文件,文件内容为一系列电影的标题。应该做的事情是:1. 找到哪几行代码创建了文件2. 看如何将具体的内容写入文件3. 然后看文件内容是如何生成的我们可以称这些被连接翻译 2021-01-24 00:45:23 · 450 阅读 · 0 评论 -
flutter threading isolates future async and await
flutter 的线程模型翻译https://buildflutter.com/flutter-threading-isolates-future-async-and-await/isolates事件循环 & 微任务(EventLoops & Microtasks)Create new IsolateAsync & AwaitFutureAsync & Await实际问题另一个介绍Future 相关的细节翻译https://buildflutter.com/flutter-原创 2020-11-29 20:50:51 · 156 阅读 · 0 评论 -
c++ lock_free 一些相关资料
http://www.purecpp.org/detail?id=2096https://www.bilibili.com/video/av47644468/https://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/http://www.gotw.ca/publications/https://www.youtube.com/watch?v=c1gO9aB9nbs原创 2020-08-24 14:26:00 · 280 阅读 · 1 评论 -
二分的一些case
#include <iostream>#include <cassert>// 查找,返回下标,找不到返回-1int binary_search_org(int* data, int iBegin, int iEnd, int iTarget){ while (iBegin <= iEnd) { int mid = iBegin + (iEnd - iBegin) / 2; auto iCurrentVal = data[mid]; if (iCurr原创 2020-08-20 17:08:03 · 145 阅读 · 0 评论 -
vs_rtti_类型识别的一些细节
#include <typeinfo>#include <iostream>class Person {public: virtual ~Person() {}};class Employee : public Person { };int main(){ Person person; Employee employee; Person* ptr = &employee; Person& ref = employee; std::c.原创 2020-08-19 15:49:45 · 429 阅读 · 0 评论 -
c++程序从开发到执行是,代码+编译器++cpu到实际执行的过程
最近读深度探索c++ 对象模型,一个深刻的体会就是c++ 代码到可执行文件,有漫长的过程,其中编译器为了我们做了太多的事情,尤其是当代c++ 11、c++ 14等等, 预编译,const expr 等等特性,编译器在其中承担了特别重要的角色c++ 从源码到可执行文件大概有编译+链接编译大概 = 预处理、预编译、词法分析、语法分析、语意分析、生成obj 文件链接大概是个寻找自己所需的东西的一个匹配的过程。这个过程里面,预处理、预编译,大有文章可做,比如,最最简单的宏展开,比如qt 里面的,预处理之原创 2020-08-19 11:01:30 · 502 阅读 · 0 评论 -
enable_shared_from_this 的一些小细节
参考:https://stackoverflow.com/questions/712279/what-is-the-usefulness-of-enable-shared-from-this#include <memory>using namespace std;class Y : public enable_shared_from_this<Y>{public: shared_ptr<Y> f() { return shared_from_thi原创 2020-08-19 09:41:29 · 159 阅读 · 0 评论 -
进制相关算法
https://leetcode-cn.com/problems/excel-sheet-column-title/https://blog.csdn.net/qq_18218335/article/details/107861040参考这两个题目之后我们重新思考https://blog.csdn.net/qq_18218335/article/details/107861040 中的问题:A = 0B = 1Z = 25AA = 26AB = 27AAA26 进制—这个是我们整个思考的原创 2020-08-12 12:06:45 · 114 阅读 · 0 评论 -
single_list reverse with k
//1,2,3,4,5,6,7,8,9,10//k == 3//3,2,1,6,5,4,9,8,7,10#include <stdio.h>#include <vector>struct _LIST_NODE{ int val = 0; _LIST_NODE* next = nullptr; _LIST_NODE() :val(0), next(nullptr) {} _LIST_NODE(int _val):val(_val),next(nullptr){}}原创 2020-08-12 10:33:34 · 107 阅读 · 0 评论 -
伤心笔记----一道小小的腾讯题目
A = 0B = 1Z = 25AA = 26AB = 27AAA实现StrToInt#include <assert.h>#include <iostream>int MyStrToInt(const char* str){ auto length = strlen(str); if (length == 1) { return str[0] - 'A'; } int result = str[length - 1] - 'A'; auto原创 2020-08-07 14:01:47 · 136 阅读 · 0 评论 -
二维迷宫最短路径问题--广度优先--演示程序
#include <stdio.h>#include <iostream>#include <vector>#include <map>#include <windows.h>#include <cstdlib>#include <iostream>#include <ctime>#include <tuple>#include <queue>#include <原创 2020-07-30 13:20:56 · 278 阅读 · 1 评论 -
c++ 智能指针学习、使用
原文:https://www.fluentcpp.com/2018/12/25/free-ebook-smart-pointers/有一件事会迅速使您的c++代码变得混乱,并阻碍其可读性,那就是内存管理。如果做得不好,这可能会把一个简单的逻辑变成毫无表现力的混乱管理,并使代码失去对内存安全性的控制。确保所有对象的编程任务正确删除非常低的抽象层次而言,由于编写良好的代码基本上可以归结为尊重的抽象级别,你想让这些任务远离您的业务逻辑(或任何形式的逻辑)。智能指针可以有效地处理这个问题,并将您的代码从繁琐的翻译 2020-06-22 03:05:32 · 638 阅读 · 0 评论 -
std::shared_ptr 中deleter 的内存模型、调用逻辑
template <class _Ux, class _Dx, enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, _Ux*&>, _SP_conve...原创 2020-05-03 16:56:43 · 600 阅读 · 0 评论 -
std::unique_ptr 阅读笔记
demo:#include<memory>#include<windows.h>const wchar_t* const FILE_PATH = LR"(D:\temp\test.txt)";#pragma optimize("",off)struct HANDLEDeleter{ void operator()(HANDLE hHandle)const...原创 2020-05-02 23:34:02 · 533 阅读 · 0 评论 -
c++17 std::unique_ptr 阅读笔记(预告)
template <class _Ty1, class _Ty2, bool = is_empty_v<_Ty1> && !is_final_v<_Ty1>>class _Compressed_pair final : private _Ty1 { // store a pair of values, deriving from empty...原创 2020-05-02 00:24:28 · 362 阅读 · 0 评论 -
windbg script learn
从需求出发:定位一个句柄占用导致的文件无法删除的问题:#include <iostream>#include <string>#include <filesystem>#include <windows.h>std::wstring getlineFromConsole(){ std::wstring strRet; std:...原创 2020-04-21 00:18:35 · 563 阅读 · 0 评论 -
std::function 学习笔记(4)
#pragma oncenamespace MyFunctionNameSpace{// size in pointers of std::function and std::any (roughly 3 pointers larger than std::string when building debug) constexpr int _Small_object_num_ptrs = ...原创 2020-04-15 10:11:29 · 314 阅读 · 0 评论 -
std::function 学习笔记(3)
下面是我的std::function的阅读笔记:// CLASS TEMPLATE functiontemplate <class _Fty>class function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects // 注意这里,继承的是_Get_funct...原创 2020-04-14 23:12:15 · 1060 阅读 · 0 评论 -
std::function 学习笔记(2)
隐约知道有个东西叫做std::function,但一直用的习惯的是c 风格函数指针,那么,什么是 std::function呢?这个新东西的应用场景是什么?和函数指针的区别是什么?什么时候该用函数指针,什么时候该用std::function?它潜在的代码的开销是什么?用函数指针初始化,std::function ,会如何呢?现在我们来用std::function 重写上面的函数:...原创 2020-04-14 00:28:17 · 324 阅读 · 0 评论 -
std::function 学习笔记
隐约知道有个东西叫做std::function,但一直用的习惯的是c 风格函数指针,那么,什么是 std::function呢?这个新东西的应用场景是什么?和函数指针的区别是什么?什么时候该用函数指针,什么时候该用std::function?它潜在的代码的开销是什么?用函数指针初始化,std::function ,会如何呢?1. std::function的 定义:https://zh.cpp...原创 2020-04-14 00:04:35 · 406 阅读 · 0 评论 -
utf8tows Windows vs2019 c++ 17 有一个意想不到的锁可能影响性能,用的时候,千万小心
#include <iostream>#include <algorithm>#include <vector>#include <iterator>#include <thread>#include <atlstr.h>#include <atlconv.h>#include <casser...原创 2020-04-11 14:56:29 · 580 阅读 · 0 评论 -
c++ smart_ptr(vs2019 c++ 17) learn 1
#include <memory>#include <iostream>#include <cstdio>#pragma optimize("",off)char* g_temp_test_valid = nullptr;std::shared_ptr<char[]> getMem() { std::shared_ptr<char...原创 2020-04-05 00:01:29 · 1262 阅读 · 0 评论 -
c++ typeid template 编程小玩具,splitstring to container
#include <iostream>#include <string>#include <regex>#include <vector>#include <set>#include <type_traits>#include <list>#include <unordered_set>...原创 2020-03-27 20:17:57 · 256 阅读 · 0 评论 -
python3编码实验
https://zhuanlan.zhihu.com/p/40834093参照此文章进行编码实验python 源文件的编码格式2. 所谓的源码文件的格式和文本本身的格式不同的时候,会出现乱码的问题:读取不同编码格式的文件将内容以不同的编码格式写到文件需要写文件的时候,如果需要指定编码格式,两种办法:5.1 文本模式打开,同时指定编码...原创 2020-02-29 23:53:11 · 210 阅读 · 0 评论 -
构造、析构、赋值运算
构造、析构、赋值运算了解C++ 默认编写并调用哪些函数如果没有声明,编译器将为C++ 类声明(编译器版本的)构造函数、一个拷贝构造函数、拷贝赋值操作符和一个析构函数,它们都是public、inline默认行为拷贝构造函数、拷贝赋值操作符单纯的将来源对象的每个非静态成员变量拷贝到目标对象内置数据类型字节拷贝非内置数据类型存在拷贝构造函数则调用,否则就执行同...原创 2018-12-02 02:35:27 · 324 阅读 · 0 评论 -
确定对象被使用前已先被初始化
确定对象被使用前已先被初始化未初始化代表的是不确定内置类型,必须手工完成初始化内置类型之外的,构造函数进行初始化不要混淆了赋值和初始化的概念对象的成员变量的初始化动作发生在进入构造函数本体之前使用成员初值表这个初值表的初始化操作是在构造函数之前的如果是在构造函数内赋值,此时就是赋值而不是初始化了,因为,此时,某些成员变量的默认构造函数,或者,父类构造函数已经开始执行了...原创 2018-12-01 13:04:05 · 354 阅读 · 0 评论 -
尽可能用const
尽可能用const细节const 出现在星号左边,表示被指物是常量const 出现在星号右边,指针自身是常量const int * pw;int const * pw;含义相同STL 迭代器中const std::vector::iterator // iter 值不可变std::vector::const_iterator cIter;// cIter 指向的内容不可变...翻译 2018-12-01 12:20:21 · 132 阅读 · 0 评论 -
资源管理
资源管理以对象管理资源void f(){std::auto_ptr<Investment> pInv(createInvestment());//1.调用factory函数,2使用pInv,3.经由auto_ptr 析构函数自动删除pInv获得对象后立即放进管理对象,RAII,资源获得时机便是初始化时机管理对象运用析构函数确保资源被释放问题auto_p...原创 2018-12-02 19:11:24 · 184 阅读 · 0 评论 -
子集生成(bit、递归、子集生成)
#include <iostream>#include <algorithm>#include <stdlib.h>#include <cmath>using namespace std;void enumSubSetByRecurion(const string& strInput){}void enumSubSetBy...原创 2018-12-04 18:05:10 · 358 阅读 · 0 评论 -
Effective cpp(1)
声明式(declaration)是告诉编译器某个东西的名称或类型,但略去细节:extern int x; // 对象声明式std::size_t numDigits(int number); //函数声明式class Widget; // 类声明式template<typename T> // 模板(template)声明式定义式(definiton)的任务是...原创 2018-11-29 00:31:57 · 271 阅读 · 0 评论 -
函数链接与调用,导入函数的调用
环境:VS2017 Community,Win32 Debug,项目属性,常规,全程序优化,无全程序优化首先来看普通函数的调用过程#include void hello(){ printf("Hello World\r\n"); return;}int main(){ hello(); getchar(); getchar();原创 2018-01-28 18:23:21 · 1121 阅读 · 0 评论 -
内存管理
内存管理内存泄漏内存泄漏的严重性和付出的努力无关,只与使用的方法有关关键在更易管理的类型中隐藏分配和释放单个对象使用make_unique 或 make_shared多个对象使用标准容器vector、无序map对字符串来说,使用string,比自己操作内存好减少显式分配和解除分配的数量,使剩余的示例更容易跟踪。缺少显式内存管理,宏,强制转换,溢出检...翻译 2018-12-12 22:27:46 · 180 阅读 · 0 评论 -
实现
实现尽可能延后变量定义式的出现时间只要定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序控制流到达这个变量定义式,便需要承担构造成本:当这个变量离开其作用域,便承受析构成本。即使这个变量最终并未被使用,仍然需要耗费这些成本,所以应该尽可能的避免这种情形必要时定义、延时定义好处增加程序的清晰度并改善程序效率尽量少做转型动作C++ 四种转型格式const_cast...原创 2018-12-06 00:29:17 · 247 阅读 · 0 评论 -
了解隐式接口和编译期多态
模板与泛型编程了解隐式接口和编译期多态w 必须支持哪一种接口,由template 中执行于w 身上的操作来决定的。这里,是,size(),normalize 和 swap、copy构造函数、不等比较凡涉及w 的任何函数调用,例如operator &amp;gt; 和 operator != ,有可能造成template 具现化,使这些调用得以成功,这样的具现行为发生在编译器。“以不同的temp...翻译 2018-12-14 00:41:28 · 346 阅读 · 0 评论 -
设计与声明
设计与声明让接口容易被使用,不易被误用用户可能犯什么错误错误类型以错误的次序传递参数可能传递无效的参数原则让类型容易被正确使用,不容易被误用:除非有好理由,否则应该尽量令你的types 行为与内置types 一致比如,一个容器,通过size()方法统一得到元素个数是最理想的方法,STL 中任何接口如果要求客户必须计得做某些事情,就是有着“不正确使用”的倾向...原创 2018-12-04 01:31:16 · 361 阅读 · 0 评论 -
继承与面向对象设计
继承与面向对象设计确定你的public 继承,表达的是is-a 关系举例鸟鸟会飞大部分鸟会飞一部分鸟,比如,鸵鸟,不会飞分成两类会飞不会飞这样有一个问题,可能有些程序来说,不需要区分,两种会不会飞的鸟,此时,不区分会飞的鸟和不会飞的鸟,不失为一个完美而有效的设计所有的鸟都会飞,企鹅是鸟,但是企鹅不会飞所有的鸟都有fly 的虚函数,但企鹅将其时限为...翻译 2018-12-10 00:43:06 · 171 阅读 · 0 评论 -
定制new 和 delete
了解new-handler 的行为operator new 无法满足某一内存分配需求时之前,返回一个null,某些旧编译器这么做(现在也可以指定这么做)现在,调用new-handler为了指定“用以处理内存不足”的函数,调用set_new_handler 函数:typedef int (__cdecl *new_hand)(size_t);new_hand __cdecl _se...翻译 2018-12-15 17:17:01 · 368 阅读 · 0 评论