C语言/C++
Mr成文
加油呀
展开
-
【工具使用】在线工具集锦
https://cppinsights.io/原创 2022-11-07 16:12:16 · 94 阅读 · 0 评论 -
【OpenHarmony】make_shared和make_unique失败时总会抛异常,和是否禁用异常无关
一、背景在项目代码里面有很多这种判断:handler_ = std::make_shared<UsbServerEventHandler>(eventRunner_, pms);if (handler_ == nullptr) { USB_HILOGE(MODULE_USB_SERVICE, "Init failed due to create handler error"); return false;}对此不同人有不同看法:有些人认为应该判空,防止后面使原创 2022-03-29 20:01:34 · 4199 阅读 · 0 评论 -
【c/c++】打印uint8_t类型---nothrow---no-exceptions
1、通常打印uint8_t类型的时候,我们直接使用%u来打印。但是更加严谨的做法是使用%hhu来打印。详细说明参见cppreference2、我们new之后,应该对指针进行判空,判断new是否执行成功很多时候我们会直接这样写Xxx *obj = new Xxx();,但是这样写,当new执行失败后会抛出异常,而不是返回nullptr,所以后续的判空也就是无效的。正确的写法如下,应该给new标记nothrow,这样出错时就会返回nullptr:详细参考cppreference#include &原创 2022-03-18 17:13:26 · 6041 阅读 · 0 评论 -
【c++新特性】lambda表达式原理剖析
一、基本概念lambda表达式,c++11开始加进来的新特性。二、语法讲解三、代码实践原创 2021-03-17 00:36:04 · 248 阅读 · 0 评论 -
【c++11 新特性系列】auto自动推倒
auto可以一条语句声明多个变量,但是这些变量类型必须相同。引用其实是使用引用的对象,特别是当引用被用作初始值的时候,真正参与初始化的其实是引用对象的值。此时编译器以引用对象的类型作为auto的类型。auto一般会忽略掉顶层const,对常量对象取地址是一种底层const如果希望推断出的auto类型是一个顶层const,需要明确指出。不能为非常量引用绑定字面值。...原创 2021-03-14 20:24:40 · 185 阅读 · 0 评论 -
【算法设计与分析】最短路径算法总结
目前掌握的最短路算法有以下几种。Dijkstra算法广度优先搜索算法(BFS)贪心最好优先搜索算法(Greedy Best First Search)。A*算法。2-hop算法(未掌握)。bellman-ford算法。floyd-warshall算法。...原创 2019-04-07 11:36:43 · 933 阅读 · 0 评论 -
【设计模式】观察者模式
设计模式分为三类:创建型、结构型、行为型。观察者模式属于行为型。在如下场景中,一个类的状态改变或者某个动作会触发另一个类的改变,如果不使用观察者模式,那么这两个类就会耦合在一块,如果需要被触发的类越来越多,那么程序就会越来越臃肿,越乱。观察者通过抽象通知接口,将订阅者和发布者隔离开,实现了结偶。...原创 2020-12-20 22:15:04 · 140 阅读 · 0 评论 -
【c/c++】指针传参相关问题
如下代码输出是什么:#include <iostream>using namespace std;struct List{ int val; List* next; List(int val_in, List* next_in=NULL) { val = val_in; next = next_in; }};void getNext(List* lst)...原创 2020-12-20 12:11:51 · 244 阅读 · 0 评论 -
【linux开发工具】g++常用编译选项(持续更新2020-11-7)
-o目标文件名g++ main.cpp -o mainmain.cpp编译后生成main。-g生成可以使用gdb来debug的目标文件g++ main.cpp -o main -g-std=c++17按照c++17标准进行编译如果你代码中用到了c++17的新特性,编译时需要加入上述选项,否则会报错。-std=c++11同。-fsanitize=address生成可以检查内存泄漏的目标文件...原创 2020-11-07 22:46:54 · 407 阅读 · 1 评论 -
【c++】很实用却不常见的操作
文章目录1、当数字比较大的时候可以使用分隔符(c++14)2、可以对bool类型使用and, or, xor, not, 关键字(c++98)3、可以给int赋二进制字面量(c++14)4、在if中直接赋值(c++17)5、表达式返回左值(c++98)6、结构化绑定(c++17)1、当数字比较大的时候可以使用分隔符(c++14)#include <iostream>using namespace std;int main(){ int num = 100'000'000;原创 2020-10-24 22:01:48 · 349 阅读 · 0 评论 -
【c++】继承和多态---学习笔记
在c++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。原创 2020-10-08 10:58:33 · 207 阅读 · 0 评论 -
【C++发邮件】ubuntu apache tomcat9 配置CGI
一、背景这段时间没啥事可做。呆在家又非常焦虑,为了缓解焦虑,同时也为了后面在工作中更加顺利,想学习用C++来做后台开发。做一个最简单的邮件发送功能吧!就是说我自己写了个人网站,在上面设计了一个向我发邮件的板块。我想做的功能就是这么简单,但是真正开始做的时候发现还是比较费劲。二、配置CGI首先我打算用CGI来开发,第一步就是配置CGI。网上的教程都比较详细,但是我就是按照教程配置了一下午,还是没弄出来,最终休息了一下,晚上才弄出来了。1、安装服务器软件我机器上是tomcat9。一般来说安装就是下原创 2020-06-01 22:30:23 · 410 阅读 · 0 评论 -
【C/C++】为什么INT_MAX(整形最大值)减去INT_MIN(整形最小值)等于-1
首先INT_MAX是int所能够正确存储的最大整形,是一个很大的正整数INT_MIN是int所能够正确存储的最小整形,是一个很小的负整数。所以很大的正整数减去很小的负整数,将会是一个比INT_MAX还要大的正整数,而int所能正常存储的最大整数是INT_MAX,所以相减后的结果肯定不能正常存储,也就是说会发生溢出,最终导致结果为-1。强烈建议首先看下我的这篇文章,便于理解下面的内容。in...原创 2019-09-12 20:49:46 · 1856 阅读 · 0 评论 -
【c++】bigo笔试填坑之强制类型转换
bigo c++后台开发有一道笔试题问下面的程序输出什么。#include <iostream>using namespace std;int main(){ typedef bool BOOL; BOOL a = (BOOL)(1<<16); printf("%d\n",a); typedef unsigned char ...原创 2019-09-15 11:10:34 · 552 阅读 · 0 评论 -
【算法设计与分析】KMP算法
俗称看毛片算法#include <iostream>#include <string>using namespace std;/* P 为模式串,下标从 0 开始 */void GetNext(string P, int next[]){ int p_len = P.size(); int i = 0; // P 的下标 in...原创 2019-09-18 15:34:29 · 328 阅读 · 0 评论 -
【设计模式】单例模式
单例模式分为两种懒汉式:就是使用的时候才会产生实例。饿汉式:一开始就产生实例。具体实现如下:需要注意,成员变量和成员函数必须是静态static的,因为单例模式不允许直接使用构造函数,所以外部只能通过类名来使用相关函数,所以函数及数据成员必须是静态的。//懒汉式#include <iostream>using namespace std;class MyClas...原创 2019-09-24 19:55:11 · 153 阅读 · 0 评论 -
【socket】三次握手是在listen中完成,accept只从完成连接的队列中拿出一个连接
看了网上的一些博客,说法不一,查阅了相关英文文档,也只了解了大概。所以我就自己设计实验来看下,服务端三次握手到底是在什么时候完成的。首先客户端三次握手毫无疑问是在connect中完成的。服务端到底是在listen中完成还是在accept中完成我们可以设计一个实验,就是说,在服务端只写listen,不写accept。这样一来如果accept参与了三次握手,那么在没有accept的服务端程序中...原创 2019-09-28 12:51:58 · 791 阅读 · 0 评论 -
【c++】容器基础----顺序容器,vector,list,deque,forward_list
线性容器包括vector,list,deque。++的优先级高于*应用vector<int>::iterator iter = ivec.begin();// prints 10 9 8 ... 1while (iter != ivec.end())cout << *iter++ << endl; // 返回加一前的副本,然后取值如果使用++...原创 2019-10-02 19:58:12 · 185 阅读 · 0 评论 -
【c++】容器基础-----string,string和其它进制数之间的转化,各种版本的find
#include <iostream>using namespace std;int main(){ const char* c_chr = "123456"; string str1(c_chr); string str2(c_chr,2,3); string str3(c_chr,2,100); string str4(c_chr,5); cout<<...原创 2019-10-03 10:48:36 · 189 阅读 · 0 评论 -
【c++】泛型算法-----find,count,lambda,copy,replace,back_inserter,inserter,sort,unique,erase,ostream_iterat
标准库将泛型算法定义在头文件algorithm和numeric中。一、只读算法可以使用c++11中新特性begin()和end()函数来得到数组的头部指针和尾部指针。1、find和countfind函数和count函数:vector<int> vec_int{1,2,3,4,5,6,7,8,9,9,8,7,6,5,5,5,5,5}; cout<<c...原创 2019-10-04 09:06:45 · 392 阅读 · 0 评论 -
【c++】关联容器-----map,set,multimap,multiset,unordered_set,unordered_map。
主要是map和set,set支持find操作,如果不存在,那么会返回尾后迭代器。关联容器支持的操作关联容器的迭代器都是双向的。map和set的初始化:map,multimap,set,multiset都是有序的。vector的迭代器是可以比较大小的,list的迭代器不可以比较大小:#include <iostream>#include <vecto...原创 2019-10-04 18:53:44 · 300 阅读 · 0 评论 -
【c++】动态内存----shared_ptr,unique_ptr,weak_ptr,allocator
三个指针shared_ptr,unique_ptr,weak_ptr。都定义在memory头文件中。一、动态内存与智能指针1、shared_ptr类需要指明是指向什么类型的指针。make_sharedshared_ptr自动销毁所管理的内存,析构函数。什么时候智能指针计数增加:2、直接管理内存new出来的内置类型,如果不进行值初始化,那么它里面的内容是随机...原创 2019-10-05 15:26:15 · 238 阅读 · 1 评论 -
【c++】处理类型---类型别名,auto, decltype
1、类型别名using Age = int;typedef int Age;指针、常量和类型别名#include <iostream>#define MPINT int*using namespace std;using Pint=int*;int main(){ int a = 10; const Pint c_pint = &a; int b...原创 2019-10-06 14:18:28 · 203 阅读 · 0 评论 -
【c++】类------构造函数,友元类,友元函数,隐式类型转换,静态成员
一、定义抽象数据类型每一个非静态成员函数都有一个隐式的this形参,当某个对象调用成员函数时,其实是通过类名调用成员函数,然后把对象地址传递给this形参。常量对象不能调用普通的成员函数。这是因为普通成员函数中隐式形参this是一个指向非常量的常量指针,也就是说它指向的地址不变,但是地址所在内存中的数据可以发生变化。但是常量对象的指针是指向常量空间的,也就是对象所在内存数据不能发生变化。所...原创 2019-10-07 14:15:00 · 466 阅读 · 0 评论 -
如何进行二、八、十六进制转化和位操作?
一、进制转化直接查看链接就可以了,里面讲的很详细,我们重点说数据存储和位操作 二、八、十、十六进制间转化 二、数据存储①数值的原码表示 在这之前,先来了解一下数据的存储形式:计算机中数据是以二进制的形式存储的。8个二进制位(bit)组成一个字节(byte),连续的两个字节构成了一个字(word)。这八个二进制位最左端的称为最高位,最右端的称为最低位。 数值的原码是指,最高位用作符号位原创 2016-12-23 21:54:24 · 1215 阅读 · 0 评论 -
【c++】拷贝构造函数和等号重载、友元函数、输入输符号重载
在函数参数是类对象函数返回值是类对象给类对象使用‘=’号赋值时,会调用拷贝构造函数。默认拷贝构造函数不处理静态变量。构造函数可以被重载,析构函数不能被重载。拷贝构造函数赋值运算符重载友元函数不是任何类的成员函数,友元函数可以在类中声明。友元函数访问静态成员时,不需要对象做参数。函数重载在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个...原创 2019-09-10 11:20:13 · 305 阅读 · 0 评论 -
【c++】静态变量和静态成员函数
原文链接总结:静态成员函数只能访问静态数据成员。非静态成员函数可以访问静态数据成员。公有静态数据成员和静态数据函数,可以直接通过类名访问。静态数据成员的初始化需要使用类名在类外部初始化。静态成员函数中没有this指针。静态数据成员不依赖对象生命周期。#include <iostream>using namespace std;class test{pri...原创 2019-09-10 09:53:06 · 490 阅读 · 0 评论 -
【c++】基类的析构函数声明为虚函数
如果把基类的析构函数声明为虚函数,那么当使用new等手动申请空间,使得基类的指针指向子类。最后释放基类指针时,会调用子类的析构函数。下面这段代码有问题吗?#include <iostream>using namespace std;class MyClass{private:public: MyClass() { cout<&l...原创 2019-09-09 19:54:08 · 851 阅读 · 0 评论 -
【c++】函数指针的使用
原文链接转载 2018-12-01 13:15:05 · 139 阅读 · 0 评论 -
【c++遇坑警告】strcpy_s函数的使用
一、函数原型ACRTIMP errno_t __cdecl strcpy_s( _Out_writes_z_(_SizeInBytes) char* _Destination, _In_ rsize_t _SizeInBytes, _In_z_ ...原创 2018-11-12 12:42:34 · 6596 阅读 · 5 评论 -
【c++】=重载,报错:没有合适的复制构造函数
不想看太多的朋友看这句就行了:在你的复制构造函数作为参数传进去的那个对象前加个const.是这样的,在写机器学习作业的时候,遇到了很多矩阵算法,为了处理上的方便,我写了一个矩阵类Matrix,如下:#pragma once#include &lt;iostream&gt;class Matrix {public: Matrix(); /* *释放内存空间 */ ~Mat...原创 2018-11-11 10:14:53 · 11094 阅读 · 16 评论 -
【C/C++语言】文件处理基础概念及进阶使用
一、基本概念二、进阶使用1、顺序文件的创建三、常用方法一、基本概念字符集(Character set):能够用来编写程序及表示数据的所有字符组成的集合。stdin, stdout,stderr分别表示标准输入,标准输出,标准错误文件。函数fgetc需要接收一个指向目标文件的FILE指针作为实参。列如fgetc(stdin),将从标准输入中读取一个字符,相当于...原创 2018-09-22 11:33:01 · 295 阅读 · 0 评论 -
【c++】string分割为substring,string, int, char*之间的相互转化及其格式化输出setW setfill
一、类型转换1、从string中划分sub string.2、将string类型转换为char*类型。3、将string类型转换为int类型。4、将int类型转换为string类型5、将string按照特定字符划分成sub string。6、将int转换成其他进制形式的数再转换成char*类型7、将其他进制的字符串形式的数转换成另一种进制的数的字符串。二、特定格式的输出1...原创 2018-07-05 19:02:50 · 832 阅读 · 0 评论 -
C语言 如何在函数中使用指针?
一指针变量做函数参数1列子引出2源码实现3错误分析错误类型一错误类型二错误类型三4主调函数传回数据的第二种方式二数组做函数参数三函数的指针1函数语句的存储和函数的指针的定义2变量指向函数及函数调用3示例读者,你好! 如果你精通C,希望得到你的斧正;如果你是初学者,希望对你有所帮助! 加粗的是我认为比较重要的内容一、指针变量做函数参数1、列子引出先用一个列子来说明,何为指针原创 2016-12-20 00:01:07 · 12429 阅读 · 0 评论 -
c语言 如何用指针来处理字符串?
一字符指针1字符指针输出字符串2字符指针处理字符串3字符数组与字符指针处理字符串有何不同二指针数组读者,你好! 如果你精通C,希望能得到你的斧正;如果你是初学者,希望能对你有所帮助。 加粗的是一些我认为比较重要的内容。一、字符指针1、字符指针输出字符串为了更好的理解这部分内容,我们先看一个例子:#include &lt;stdio.h&gt;int main(){ char *ps原创 2016-12-09 20:48:06 · 42170 阅读 · 24 评论 -
数组(一维和二维)与指针(C语言)
一指向一维数组的指针1使指针指向数组首地址的方法2通过指针引用一维数组元素二二维数组与指针1先重新认识一下二维数组三指向数组的指针变量指向二维数组某一行读者,你好! 如果你精通C,希望能得到你的斧正;如果你是初学者,希望能对你有所帮助。 加粗的是一些我认为比较重要的内容。一、指向一维数组的指针1、使指针指向数组首地址的方法int a[5]; //整型数组int *pa;原创 2016-12-06 16:04:59 · 1503 阅读 · 2 评论 -
二维数组及其应用
一、二维数组的定义与赋值原创 2016-10-28 22:28:01 · 1431 阅读 · 0 评论 -
【c++】如何获取int类型最大值以及float类型最大值
原文链接转载 2018-12-01 13:51:37 · 3056 阅读 · 0 评论 -
【c++】编程心得
在使用模板的时候要看情况,判断传值进去,还是传地址进去,两者会产生两种完全不同的效果。—用自己实现的优先队列实现Dijkstra算法时被坑后的心得。...原创 2018-12-01 14:34:51 · 510 阅读 · 0 评论 -
【c++】计算struct和union的大小
struct与union字节大小的终极解释1、字节对齐的细节和编译器实现相关,但一般而言,如在windows下,就VC而言,满足一下三个准则:结构体变量的首地址能够被其最宽基本类型成员的大小所整除;结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);即:在默认情况下,VC规...转载 2019-09-08 13:13:00 · 752 阅读 · 0 评论