C/C++
C++的常见问题与C++ Primer读书笔记。
AlexanderGan
Focus on VM & Compiler Now.
展开
-
哈希表__C++泛型实现简易的哈希表
哈希表__C++泛型实现简易的哈希表1.简易的哈希表支持Value的泛型, Key值在这里只能用int型,如果要使用其他类型作为Key还需要定义hashCode函数,获取从其他类型映射到int型的哈希函数。这里的扩容机制采用的是负载因子超过限制或者桶中元素超过桶数,则扩容到二倍Size附近的质数,质数可以减少哈希碰撞。下面是简单的原理实现。template<typename K, typename V>struct Pair { Pair(const K& k, const V&原创 2021-09-20 11:11:28 · 369 阅读 · 0 评论 -
堆__C++泛型实现简易的优先队列
堆__C++泛型实现简易的优先队列最近复习优先队列的实现时,想到了使用泛型的方法来实现,可以灵活的调整优先队列的排序方法,这里小小的分享一下:template<typename T>class Less {public: bool operator()(const T& a, const T& b) { return a < b; }};template<typename T>class Greater {p原创 2021-08-28 20:36:45 · 164 阅读 · 1 评论 -
stl_algo_图解lower_bound & upper_bound算法及LeetCode例题
stl_algo_图解lower_bound & upper_bound算法1.1、lower_bound的作用 lower_bound就是二分查找的一种左边界版本,他返回一个迭代器。在排序好的[first, last)区间中寻找value,如果找到这些元素(可能有多个重复的),就返回指向第一个元素的迭代器;如果没找到,那么就返回指向该value的值在不破坏排序条件下应该在的位置的迭代器,例子如下:lb1 = lower_bound(first, last, 2);lb2 = lower_原创 2020-11-24 19:54:52 · 262 阅读 · 0 评论 -
Qt_undefined reference to `xxx‘ && collect2.exe:-1: error: error: ld returned 1 exit status的解决办法
Qt_undefined reference to `xxx’ && collect2.exe???? error: error: ld returned 1 exit status的解决办法可能的解决办法:这个错误是链接的时候发生的错误。1、检查include的头文件是否有遗漏。2、 .h文件中声明的函数在cpp中没有实现,但其他地方又调用了这个函数。比较隐秘的就是带参的构造函数,需要检查是否声明了没有实现,哪怕是空实现也需要有。3、外部链接库错误,在Pro文件中中重新添加外部原创 2020-11-16 10:35:37 · 2041 阅读 · 0 评论 -
stl_algo_图解next_permutation、prev_permutation算法
stl_algo_图解next_permutation、prev_premutation算法 STL提供了2个计算排列组合的算法,分别是next_permutation和prev_premutation,这两个算法的作用分别是计算当前排列的下一个排列和上一个排列。例如{1,2,3}的排列按字典序列分别是123, 132, 213, 231, 312, 321这六种,排列123的下一个排列就是132,它没有上一个排列。排列321的上一个排列是312,他没有下一个排列。 这里可以观察出一个规律,如果一个原创 2020-11-14 14:17:32 · 250 阅读 · 0 评论 -
图解旋转数组_Go实现C++ STL中的随机迭代器版本的rotate算法
旋转数组_Go实现C++ STL中的随机迭代器版本的rotate算法一、旋转数组(向左)的实现方法一 先上图:显然这个方式就是通过3遍reverse来实现旋转数组,这个方法比较简单,不是本文讨论的重点。二、Go实现的STL中的随机迭代器版本的rotate算法//辗转相除法求最大公约数func Gcd(a int ,b int) int{ max := Max(a,b) min := Min(a,b) for min!=0 { t := max % mi原创 2020-09-20 21:28:18 · 253 阅读 · 0 评论 -
C++11__共享型智能指针的一种靠谱的简单实现
C++11__共享型智能指针的一种靠谱的简易实现 实现共享型智能指针的关键在于共享计数,这里利用资格资源管理类实现共享计数的相关操作。一、实现代码 以下代码提供了一种规范的共享型智能指针简单实现,注释应该比较清楚。#pragma once#include<utility>//std::swap//资源管理类class SharedCount{public: SharedCount() noexcept : _count(1) {}//资源取得时便是初始化时机 void原创 2020-07-13 19:46:51 · 374 阅读 · 0 评论 -
SGI STL中的空间配置器(Allocator)图文详解
SGI STL中的空间配置器图文详解1 为什么需要内存配置器?1)在STL中,为了实现各种容器,需要分配内存,这个过程中如果直接在堆上开辟空间,可能会造成内存外碎片化。1.内碎片化是指因为内存对齐、或者是按照其他的分配方式导致的已经分配的内存无法得到充分利用,比如需要5个字节,实际分到了8个字节的情况。2.外碎片化是指,内存中有足够的空间,但是这些空间都是不连续的零散空间,无法分配给申请内...原创 2020-04-28 17:42:59 · 708 阅读 · 0 评论 -
关于C++运算符重载的一些注意事项
1 注意事项1)=, [], () 和 -> 操作符只能通过成员函数进行重载2)<< 和 >>只能通过全局函数配合友元函数进行重载3)不要重载 && 和 || 操作符,因为无法实现短路规则2 常规做法运算符:所有的一元运算符,如递增运算符( ++ )、递减运算符( -- )一元减运算符,即负号( - )、逻辑非运算符( ! )等---...原创 2020-04-25 17:54:18 · 308 阅读 · 0 评论 -
别再问我了!C/C++中的const关键词对比详解
C/C++中的const关键词详解1. 全局const1.1 c语言中的全局constconst是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。既然是变量,那么就会给它分配内存,在c语言中const修饰的全局只读变量是外部连接[1]的。c语言中全局const存储在字符常量区,无法通过指针修改,是真正意义上的“只读”;const int arrSize = 5;int...原创 2020-04-18 10:36:08 · 399 阅读 · 0 评论 -
图文详解虚继承的实现原理(内存布局分析)
1.为什么需要虚继承?虚继承是为了解决多重继承中存在的一些问题而出现的。在多重继承中,可能会存在多个派生类继承同一个基类的情况,这个时候,不仅会浪费存储空间,而且还会导致二义性。二义性解释如下://diamond_Inherit.h#pragma once#define _CRT_SECURE_NO_WARNINGS#include <iostream>using nam...原创 2020-04-03 22:21:18 · 1545 阅读 · 3 评论 -
C++继承中关于子类构造函数的写法
转载自:https://www.cnblogs.com/shmilxu/p/4849097.html构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函...转载 2020-04-03 15:55:34 · 352 阅读 · 0 评论 -
C++基础_智能指针与动态内存(一)shared_ptr类
1、程序执行时的内存空间分配C/C++程序所占用的内存除了文字常量区(存放常量字符串)和程序代码区(存放函数体的二进制代码),主要是三个部分:1、栈内存(stack) 由编译器自动分配释放,存放定义在函数内的非static对象。如函数内的局部变量、函数参数、返回数据、返回地址等,当这些对象离开作用域后会被自动释放。2、静态内存 由编译器自动分配释放,保存局部static对象,类stat...原创 2020-03-30 16:13:20 · 507 阅读 · 0 评论 -
C++ primer 5th .Chapter 7 类(一) 读书笔记
C++ primer 5th .Chapter 7 类(一) 读书笔记 7.1 定义抽象数据类型 7.2 访问控制与封装 7.3 类的其它特性 7.4 类的作用域 7.5 构造函数再探 7.6 类的静态成员7.1 定义抽象数据类型Note:定义在类内部的函数是隐式的inline函数。7.1.2定义改进Sales_data类this指针成员函数通过一个名为this的额外的隐式...原创 2020-03-17 16:44:17 · 214 阅读 · 0 评论 -
C++ primer 5th .Chapter 6 函数(二) 读书笔记
C++ primer 5th .Chapter 6 函数(二) 读书笔记6.4 函数重载如果同一作用域内的几个函数名字相同但是形参列表不同,我们称之为重载函数。在调用时,编译器会根据传递的实参类型腿短想要的是哪个函数。Tips:main函数无法重载判断两个形参类型是否相异int look(const int &);int look(const int &num);第...原创 2020-02-24 14:40:25 · 191 阅读 · 0 评论 -
C++ primer 5th .Chapter 6 函数(一) 读书笔记
C++ primer 5th .Chapter 6 函数 读书笔记6.1 函数基础6.2 参数传递6.3 返回类型和return函数6.4 函数重载6.5 特殊用途语言特性6.6 函数匹配6.7 函数指针6.1 函数基础调用函数函数调用完成两项工作:一是用实参初始化函数对应的形参,二是将控制权转移给被调用的函数。return语句也完成两项工作:一是返回return 语句中的...原创 2020-02-12 19:23:01 · 183 阅读 · 0 评论 -
C++ primer 5th .Chapter 5 语句 读书笔记
C++ primer 5th .Chapter 5 读书笔记5.1 简单语句5.2 语句作用域5.3 条件语句5.4 迭代语句5.5 跳转语句5.6 try语句块和异常处理5.1 简单语句表达式语句ival+5;//无用的表达式语句空语句Tips:使用空语句时应当加上注释复合语句复合语句是指用花括号括起来的(可能为空的)语句和声明的序列,也被称作块。Tips:在块中...原创 2020-01-16 10:12:04 · 198 阅读 · 0 评论 -
C++中二维数组传参的方法详解
C++中二维数组传参的方法首先需要明确,C++中其实没有多维数组,所谓的多维数组,其实就是数组的数组;另外,数组中元素的个数也是数组类型的一部分。当一个数组的元素仍然是数组时,通常使用2个维度来定义它,一个数组表示数组本身的大小,另一个维度表示其元素大小(它的元素也是数组):int ia[3][4]; //大小为3的数组,每个元素是含有4个整数的数组int (*p)[4] = ia;/...原创 2020-01-07 15:23:20 · 982 阅读 · 0 评论 -
C++ primer 5th .Chapter 4 表达式 读书笔记
C++ primer 5th .Chapter 4 读书笔记4.1 表达式基础4.2 算数运算符4.3 逻辑和关系运算符4.4 赋值运算符4.5 递增和递减运算符4.6 成员访问运算符4.7 条件运算符4.8 位运算符4.9 sizeof运算符4.10 逗号运算符4.11 类型转换4.12 运算符优先级表##4,。...原创 2020-01-05 16:53:29 · 222 阅读 · 0 评论 -
C++ primer 5th .Chapter 3 字符串、向量和数组 读书笔记
C++ primer 5th .Chapter 3 读书笔记 3.1 命名空间的using声明 3.2 标准库类型string 3.3 标准库类型vector 3.4 迭代器介绍 3.5 数组 3.6 多维数组3.1 命名空间的using声明Tips: 头文件不应该包含using声明因为头文件的内容会被拷贝到所有引用它的文件中去 ,对于某些程序来说可能会造成名字冲突。3.2 ...原创 2019-12-23 15:53:05 · 213 阅读 · 0 评论 -
C++ primer 5th .Chapter 2 C++基础 读书笔记
C++ primer 5th .Chapter 2 读书笔记本笔记主要总结了第二章的一些重点和容易忽略的细节2.1 基本内置类型2.2 变量2.3复合类型2.4 const 限定符2.4.1常量引用(References to const)2.4.2 指针和const2.5处理类型:2.5.1类型别名2.5.2 auto类型说明符2.5.3 decltype类型指示符本笔记主要总结了第二章的一些...原创 2019-12-15 16:47:34 · 388 阅读 · 0 评论