C++
光头小杨
发挥自己最大的价值
展开
-
Ubuntu 22.04 将 gcc 降级为 5.2.0
参考链接:https://github.com/staticfloat/gcc/commit/94801184df727b94bf7b8d64b1f98a22f51325d7。因为 ubuntu 自带的 gcc 是 11,gcc11 默认是 c++17,如果使用 gcc11 编译的话后面需要修改的错误比较多,所以这里先用 gcc-9 编译代码了。参考链接:https://www.jianshu.com/p/0148b44d4cfc。解决办法:找到下面几个文件依次修改,具体可以参考。原创 2023-10-10 15:11:34 · 1220 阅读 · 0 评论 -
Windows c++ 读写注册表
背景在 Windows 上面,我们常用注册表作为一个 cache 来保存一些数据,这样当程序下一次启动的时候,读取注册表,就能获取到上一次缓存的结果函数介绍创建指定的注册表项具体函数WINADVAPI LSTATUS APIENTRY RegCreateKeyA ( _In_ HKEY hKey, _In_opt_ LPCSTR lpSubKey, _Out_ PHKEY phkResult);参数介绍hKey:打开的注册表项的句柄,一般为 HKE.原创 2021-09-19 10:32:59 · 3872 阅读 · 0 评论 -
求一个数字二进制中 1 的个数
问题描述任意给定一个 32 位无符号的整数 n,计算 n 的二进制表示中 1 的个数,比如 n = 3(011))时,返回 2这是一到笔试面试经典的题目,下面介绍几种解法来实现这一道题目,如果你有更好的解法,欢迎指导交流方法一:普通法通过移位解决,每次向右移一位( >> 1),然后判断最后一位是不是 1(&1),最多循环 32 次int BitCount(unsigned int n){ int count = 0; while (n > 0) {原创 2021-03-03 10:20:12 · 268 阅读 · 1 评论 -
C++ 优先级队列 priority_queue
问题在刷题或者面试的过程中,我们经常会遇到这样一种题目,给一个数组,求最大或者最小的 k 个数,或者第 k 大或者第 k 小的数字解法看到这样一个题目,首先想到的就是大小堆,创建大小为 k 的大根堆或者小根堆,然后不断的更新堆,下面以求最大的 k 个数字为例,具体代码如下void BuildHeap(std::vector<int>& arr, int index, int len) { int i = index * 2 + 1; while (i &原创 2021-02-11 13:19:50 · 477 阅读 · 0 评论 -
利用C语言求一个数的所有质因数
//求一个数的质因数#includevoid function(int n){int sum = n;int i;for(i=2;i*i{if(n%i == 0){printf("%d ",i);while(n%i == 0) //排除掉已包含的这个质因数,比如20,第一个质因数是2,20/2=10,然后10/2=5{n = n/i;}原创 2017-02-13 20:56:42 · 16278 阅读 · 0 评论 -
x=x+1,x+=1,x++三个式子的效率谁最高
x=x+1:在执行过程中先取等号右边x的地址,计算x+1,然后取等号左边x的地址,最后将等号右边的值传给等号左边。x+=1:执行过程中先取等号左边x的地址,然后计算x+1,最后将得到的值给x,因为之前等号左边x的地址已经读出来了,所以这里就少了一次读取地址的操作,效率高于x=x+1x++:先读取x的地址,然后对x自增1,效率是三个里面最高的原创 2017-06-23 22:44:41 · 1566 阅读 · 0 评论 -
接受可变参数的函数实现多个数相加
//接受可变参数的函数实现多个数相加//不使用库函数#if 0#includeint Add(int num, ...){ int sum = 0; int i = 0; int* p = (int*)&num + 1; for (i = 0; i < num; ++i) { sum = sum + *p; p++; } return sum;}int main原创 2017-07-25 16:44:28 · 1388 阅读 · 0 评论 -
C++ 菱形继承
1、多重继承的问题:在C++类的继承中会遇到这样一个问题,一个派生类有两个或者两个以上的基类,如同下面这种继承情况类C继承了类A和类B,但是类A和类B里面有着相同的成员变量,那么类C在使用这个成员变量的时候就会出现二义性的问题,需要通过域成员运算符进行区分class A {public: A(){} ~A(){} void Display() { std::cout << "A::Hello" << std::endl; }protected: u原创 2020-10-06 09:54:48 · 268 阅读 · 0 评论 -
VS下报模块对于 SAFESEH 映像是不安全的错误
解决办法,项目 - 属性 - 链接器 - 命令行,添加/SAFESEH:NO如下图所示原创 2020-10-06 09:56:08 · 557 阅读 · 0 评论 -
C++ 智能指针中的循环引用
1、C++11 里面出现了三种智能指针,分别是std::unique_ptr,std::shared_ptr,和std::weak_ptr2、std::unique_ptr:与所指对象的内存紧密绑定,不能与其它std::unique_ptr的指针共享其对象,每一个std::unique_ptr都是唯一拥有所指向对象的内存,但是这种所有权可以通过std::move函数进行转移,转移之后原来的st...原创 2020-01-05 21:05:35 · 902 阅读 · 0 评论 -
readerwriterqueue C++单生产者,单消费者无锁队列
1、readerwriterqueue C++单生产者,单消费者无锁队列,它只支持两个线程用例,一个用于生产,一个用于消费github地址:https://github.com/cameron314/readerwriterqueue2、优点快速兼容C++11标准就像std::queue一样,你不需要为元素分配内存在连续块中预先分配内存提供一种try_enqueue...原创 2020-01-05 17:34:52 · 3020 阅读 · 0 评论 -
static和const的作用
首先,先说一说static的作用1、函数体内的static变量,作用域为函数体内,该变量的内存只被分配一次,在函数调用结束后并不会销毁,在下次调用时任然维持上次变量的值2、在模块内的static变量可以被模块内的所有函数访问,但不能被模块外的函数访问3、在模块内的static函数只可以被模块内的函数调用,不能被模块外的其它函数调用4、在类中声明的static成员变量属于整个类所有,原创 2017-06-23 22:50:22 · 444 阅读 · 1 评论 -
C++中,为什么构造函数不能够是虚函数,而析构函数可以是虚函数,而且最好是虚函数
首先说一说构造函数不能够是虚函数的原因:1、一个类有虚函数时,那么它就会对应着有一个虚表,这个虚表是存在在对象的内存空间的,所有虚函数的调用都要用到虚表,如果构造函数是虚的,那么他也就需要这个虚表来调用,但是这个时候没有执行构造函数,哪来的对象?也就是还没有分配内存空间,这个虚表你是找不到的,那么构造函数就无法执行了。所以构造函数不能是虚函数。而且虚表的初始化是在构造函数阶段完成的。2、虚原创 2017-06-26 19:26:01 · 598 阅读 · 0 评论 -
C++11中__func__,__cplusplus,long long类型,static_assert,noexcept,快速初始化成员变量用法
1、__func__预定义标识符返回所在函数的函数名,返回类型为const char*类型例子:const char* function(){ return __func__;}class Test{private: string name;public: Test() :name(__func__) { } string getName() { r原创 2017-07-07 23:04:05 · 984 阅读 · 0 评论 -
C++11中继承构造函数和委派构造函数
1、继承构造函数在C++继承中,我们可能会遇到下面这个例子class Base{public: Base(int va) :m_value(va) { } Base(char c) :m_c(c) { }private: int m_value; char m_c;};class Derived :public Base{private:pu原创 2017-07-08 22:34:55 · 3554 阅读 · 2 评论 -
C++11中sizeof运算符,friend,final,override,模板函数的默认模板参数
1、sizeof运算符C++11sizeof运算符,我们知道在C++98中sizeof是不能直接计算结构体中的非静态成员变量的字节的但是在C++11中这一点做出了改变,sizeof运算符可以直接计算结构体和类中的非静态成员变量的字节struct People{ int age;};int main(void){ struct People p; cout << "p.原创 2017-07-08 22:47:57 · 947 阅读 · 0 评论 -
C++string类的简单实现
#include<iostream>#include<cstring>using namespace std;//C++实现stringclass MyString{private: char* m_pData;public: //构造函数 MyString() { m_pData = new char[1]; *m_pData = '\0'...原创 2019-09-17 19:34:57 · 408 阅读 · 0 评论 -
C++中四种类型转换static_cast、const_cast、reinterpret_cast、dynamic_cast
一、static_cast1、用于类层次结构之间基类和派生类指针和引用之间的转换,进行向上转型是安全的,但是进行向下转型是不安全的,但是是可以转换的向上转型:我们知道基类的引用和指针都可以指向派生类的对象,那么将派生类的指针或者引用强转为基类的指针或者引用,那么这就是向上转型,也就是向父类转向下转型:向下转型就和向上转型相反,它是将父类的指针或者引用,强制转换为子类的指针或者引用...原创 2020-10-06 09:59:08 · 596 阅读 · 0 评论 -
auto C和C++中一个有意思的关键字
一、C语言和C++11之前的autoC语言中提供了存储说明符auto,register,extern,static说明的四种存储类别,在C语言和C++11之前,auto表示一个变量为自动变量,在函数内部定义变量时,如果没有声明为其它类型的变量,那么默认就是auto的,但是在函数外部会报错。例如:// main.cpp#include <iostream>// auto...原创 2019-02-03 11:38:22 · 382 阅读 · 0 评论 -
在类的成员函数中调用delete this
在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码。假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定 的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成员和转载 2017-06-28 23:47:02 · 522 阅读 · 0 评论