c++
文章平均质量分 55
嘿哈哈哈
人生就像一场演出,不到谢幕永远不知道自己有多精彩。
展开
-
读书笔记:《More Effective C++》
C++异常处理,栈展开机制:原创 2023-12-02 16:41:31 · 138 阅读 · 0 评论 -
读书笔记:《Effective C++》
【代码】读书笔记:《Effective C++》原创 2023-12-02 16:40:40 · 135 阅读 · 0 评论 -
读书笔记:《Effective Modern C++(C++14)》
使用RAII(“Resource Acquisition Is Initialization,资源获得即初始化)包装thread,在析构时进行join。和闭包类存在于编译期,闭包存在于运行时。原创 2023-12-02 16:39:47 · 368 阅读 · 0 评论 -
C++ Bit fields
【代码】C++ Bit fields。原创 2023-08-23 00:17:43 · 181 阅读 · 0 评论 -
C++ Ellipsis and variadic templates
【代码】C++ Ellipsis and variadic templates。原创 2023-08-23 00:17:10 · 226 阅读 · 0 评论 -
C++ std__get(std__tuple)
【代码】C++ std__get(std__tuple)原创 2023-08-23 00:16:37 · 199 阅读 · 0 评论 -
C++ typename and .template
【代码】C++ typename and .template。原创 2023-08-23 00:16:04 · 110 阅读 · 0 评论 -
GDB Tutorial
GDB offers a big list of commands, however the following commands are the ones used most frequently:原创 2023-08-23 00:10:07 · 94 阅读 · 0 评论 -
Object Pool: C++ Implementation
【代码】Object Pool: C++ Implementation。原创 2023-08-23 00:09:25 · 138 阅读 · 0 评论 -
C/C++ 内存管理
C/C++ 内存区栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等。堆区(heap):一般由程序员分配与释放,如果未使用内存不释放则造成内存泄漏,程序结束时由操作系统回收该进程的内存空间。(C/C++没有自动回收机制,Java/C#有)全局静态区(static):全局变量和静态变量,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。文字常量区:常量字符串,程序结束后由系统释放。程序代码区:存放原创 2023-07-23 16:46:04 · 342 阅读 · 0 评论 -
C++ 编译器和优化
源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(linker)→ 可执行文件(executables)原创 2023-07-23 16:45:09 · 374 阅读 · 0 评论 -
C++ 左右值&引用、移动语义、完美转发、返回值优化
左值:可以放到等号左边的东西叫左值。右值:不可以放到等号左边的东西就叫右值。左值:可以取地址并且有名字的东西就是左值。右值:不能取地址的没有名字的东西就是右值。原创 2023-07-23 16:43:59 · 125 阅读 · 0 评论 -
C++五种锁
互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。在某一时刻,只有一个线程可以获取互斥锁,在释放互斥锁之前其他线程都不能获取该互斥锁。如果其他线程想要获取这个互斥锁,那么这个线程只能以阻塞方式进行等待。原创 2023-07-23 16:43:28 · 493 阅读 · 0 评论 -
C++ map/set & unordered_map/unordered_set
内部实现优点缺点适用key interfacemap/set红黑树内部元素有序性O(logN)时间复杂度效率高|红黑树的父子节点和红黑性质,导致空间占用率高| 顺序要求 |operator<|| unordered_map/unordered_set | 哈希表 |O(1)时间复杂度查找速度快|哈希表的建立耗时慢不保证遍历顺序| 查找问题 |hash_valueoperator==|原创 2023-07-23 16:42:56 · 153 阅读 · 0 评论 -
C++ make_shared pros and cons
上面的代码存在两次内存分配如果使用std::make_shared只会存在一次内存分配,它会一次性申请足够大的空间用于存储Node和控制块。原创 2023-07-23 16:42:21 · 159 阅读 · 0 评论 -
C++ Linux Perf Guidelines
https://www.intel.com/content/www/us/en/docs/vtune-profiler/cookbook/2023-0/top-down-microarchitecture-analysis-method.html原创 2023-07-23 16:41:50 · 265 阅读 · 0 评论 -
C++ IB & UB
● **IB: Implementation-defined Behaviour. **The standard leaves it up to the particular compiler/platform to define the precise behaviour, but requires that it be defined.○ Using implementation-defined behaviour can be useful, but makes your code less por原创 2023-07-23 16:41:11 · 189 阅读 · 0 评论 -
C++ cast
dynamic_cast 只能够用在指向类的指针或者引用上(或者void*)。这种转换的目的是确保目标指针类型所指向的是一个有效且完整的对象。同隐式转换一样,这种转换允许upcast(从派生类向基类的转换)。但dynamic_cast 也能downcast(从基类向派生类的转换)原创 2023-07-23 16:40:39 · 99 阅读 · 0 评论 -
C++ atomic & mutex
在多线程调用下,利用std::atomic可实现数据结构的无锁设计。std::atomic原子操作主要是保护一个变量,互斥量的保护范围更大,可以一段代码或一个变量。std::atomic确保任意时刻只有一个线程对这个资源进行访问,避免了锁的使用,提高了效率。使用std::atomic,耗时比std::mutex低非常多,使用 std::atomic 能大大的提高程序的运行效率。原创 2023-07-23 16:40:14 · 240 阅读 · 0 评论 -
GCC 和 GDB
gcc 和 gdb原创 2022-10-17 18:19:28 · 129 阅读 · 0 评论 -
std::variant 与 std::visit
std::visit 的参数列表是不定长的,可以传入多个variant 变量。使用 Example 3 的编译期推断可以提高代码运行效率。原创 2022-10-17 18:11:06 · 402 阅读 · 0 评论 -
Difference between .ipp & .cpp
.ipp is used for template class and will be include in its header file.Before templates, you put the declarations of methods in the header file and the implementation went to a .cpp file. These files were compiled separately as their own compilation unit.原创 2022-09-26 11:59:37 · 221 阅读 · 0 评论 -
C++: Conan
【代码】C++: Conan。原创 2022-09-26 11:57:49 · 444 阅读 · 0 评论 -
C++: Make, CMake, Ninja, Conan
甚至不一定所有的包都得使用相同的构建系统,每个包可以使用不同的构建系统,并可以依赖于其他使用不同构建系统的包。Conan可以工作在:Windows、Linux(Ubuntu、Debian、RedHat、ArchLinux、Raspbian)、OSX、FreeBSD和SunOS,由于它是可移植的,它可以工作在任何可以运行Python的其他平台上。默认定义了当前最流行的有:gcc、cl.exe、clang、apple-clang、intel,同时支持不同的版本配置、运行时、C++标准库等。原创 2022-09-26 11:57:12 · 532 阅读 · 0 评论 -
【C++ 开发】【笔试/面试】常考笔记
文章目录@[toc]C++11 FeatureConstructor InitializerPointersNULL & nullpterPointers to data membersSmart Pointersunique_pointershared_pointerweak_pointershared_pointer implementauto & decltypeRange Based ForRead-only RangeReference RangeRange Modify:Can原创 2022-04-07 13:48:27 · 2323 阅读 · 0 评论 -
C++11 智能指针【详解+实现】【面试常考】
文章目录一、原始指针容易发生内存泄漏二、使用构造函数和析构函数解决内存泄漏三、shared_ptr共享的智能指针四、weak_ptr弱引用的智能指针五、unique_ptr独占的智能指针六、性能与安全的权衡七、智能指针的简单实现八、附录:全部代码一、原始指针容易发生内存泄漏C++ 程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。但使用普通指针,容易造成内存泄露(忘记释放)、二次释放、程序发生异常时内存泄露等问题等。所以 C++11 就引入了智能指针。C 语言中最常使用的是原创 2022-03-30 18:53:11 · 8723 阅读 · 5 评论 -
protobuf 反射及应用
protobuf 反射构建 MessageMessage* createMessage(const std::string& typeName){ Message* message = NULL; const Descriptor* descriptor = DescriptorPool::generated_pool()->FindMessageTypeByName(typeName); if (descriptor) { const Message* proto原创 2021-07-05 14:45:39 · 595 阅读 · 0 评论 -
C++ 程序解析命令行参数
命令行参数简介命令行参数可以分为需要传值的和不需要传值的,以及长参数和短参数。不需要传值,短参数:[User@ubuntu:~/Desktop]$ opt.exe -a -b[User@ubuntu:~/Desktop]$ opt.exe -ab需要传值,短参数:[User@ubuntu:~/Desktop]$ opt.exe -a valueA -b valueB需要传值,长参数:[User@ubuntu:~/Desktop]$ opt.exe --noarg --reqarg req原创 2021-07-05 14:23:43 · 3210 阅读 · 0 评论 -
do{}while(0)的作用
1. do…while(0)消除goto语句bool Execute(){ // 分配资源 int *p = new int; bool bOk(true); do { // 执行并进行错误处理 bOk = func1(); if(!bOk) break; bOk = func2(); if(!bOk) break; bOk = func3(); if(!bOk) break;原创 2021-06-25 11:46:01 · 173 阅读 · 0 评论 -
C++:iter和erase
正确写法1#include <iostream>#include <vector>int main() { std::vector<int> v = {1, 2, 3, 4}; for (auto i = v.begin(); i != v.end();) { int a = *i; std::cout << *i << std::endl; if (a % 2 == 0)原创 2021-06-04 19:09:59 · 504 阅读 · 0 评论 -
C++ unicode 转中文(utf-8)“\\u“转“\u“
#include <iostream>#include <string>#include <locale>#include <boost/locale/encoding.hpp>int main() { std::string str = "\\u00df\\u6c34"; std::basic_string<wchar_t> ret; for(int i=0;i<str.size();i+=6) {原创 2021-06-04 19:03:48 · 2872 阅读 · 0 评论 -
lib 和 dll 的区别
首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.l...原创 2019-10-20 17:24:33 · 442 阅读 · 0 评论 -
栈的实现
Stack.h#pragma once#ifndef STACK_H#define STACK_Hclass Stack{public: Stack(int MaxSize=10000); ~Stack(); bool empty() const; bool full() const; int size() const; int top()原创 2018-01-03 21:41:53 · 188 阅读 · 0 评论 -
链表的实现
LinkList.h#pragma once#ifndef LINKLIST_H#define LINKLIST_Hclass LinkList{ class Node { friend class LinkList; public: Node() {} Node(int e, Node *n = nullptr) {原创 2018-01-03 21:35:24 · 149 阅读 · 0 评论 -
线性表数组实现
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2018-01-02 19:56:19 · 439 阅读 · 0 评论 -
循环队列的实现
Queue.h#pragma once#ifndef QUEUE_H#define QUEUE_Hclass Queue{public: Queue(int MaxSize=10000); ~Queue(); bool empty() const; bool full() const; int size() const; int first(原创 2018-01-03 21:46:58 · 272 阅读 · 0 评论 -
最大堆的实现
MaxHeap.h#pragma once#ifndef MAXHEAP_H#define MAXHEAP_Htemplate<typename Object>class MaxHeap{public: MaxHeap(); ~MaxHeap(); bool empty() const; int size() const; int height()原创 2018-01-03 21:49:28 · 190 阅读 · 0 评论 -
左高树实现最大堆
MaxHblt.h#pragma once#ifndef MAXHBLT_H#define MAXHBLT_H#include"BinaryTreeNode.h"template<typename Object>class MaxHblt{public: MaxHblt(); MaxHblt(BinaryTreeNode<Object> *root); ~Max原创 2018-01-03 21:52:03 · 508 阅读 · 0 评论 -
矩阵类的实现
Matrix.h#pragma once#ifndef MATRIX_H#define MATRIX_H#include<iostream>#include<vector>#include<string>using std::cout;using std::vector;using std::string;using std::ostream;//任意类型矩阵类//行主矩阵temp原创 2018-01-03 21:53:15 · 331 阅读 · 0 评论 -
串的实现,KMP算法匹配字符串
String.h#pragma once#ifndef STRING_H#define STRING_H#include<string>class String{public: String(); String(std::string str); String(char *str); ~String(); bool empty() const;原创 2018-01-03 21:55:15 · 407 阅读 · 0 评论