
c++
若歌
仰望星空,脚踏实地
展开
-
URL字符解码
例如:https%3A%2F%2Fwww.example.com%2F%3Fparam%3Dvalue%26key%3D%E4%B8%AD%E6%96%87。param=value&key=中文。原创 2023-09-22 16:50:08 · 257 阅读 · 0 评论 -
c++根据关键字查找文件
#include <iostream>#include <string>#include <string.h>#ifdef _WIN32#include <io.h>#else#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <dirent.h>#endifusing namespace std;.转载 2021-07-20 09:09:31 · 1878 阅读 · 0 评论 -
C++环状队列(数据缓冲区)
头文件:#include <mutex>#include <atomic>class CBuffer{public: CBuffer();//缓存一百万数据 ~CBuffer(); void Init();//初始化 void Reset();//重置标志位 bool Write(char*buf, int len); bool Read(char*buf, int len);private: std::atomic_int w_index;//写指针原创 2020-05-13 11:06:30 · 705 阅读 · 0 评论 -
c11 模板元编程---斐波那契数列以及求最大数
参考博客:https://www.cnblogs.com/qicosmos/p/4480460.html#include <iostream>#include <type_traits>using namespace std;//斐波那契数列template<int T>struct Fibonacci_1{ enum { res = Fibonacci_1<T - 1>::res + Fibonacci_1<T - 2>::原创 2020-05-12 10:05:27 · 869 阅读 · 0 评论 -
C++ WinAPI FTP客户端
Win32 API函数:参考链接:https://blog.youkuaiyun.com/cddchina/article/details/38727545InternetOpen 初始化 Win32 internet InternetConnect 打开一个FTP, HTTP, or Gopher 应用会话 FtpCreateDirectory 在服务器上建立一个新的目录 FtpRemo...原创 2020-05-01 11:18:41 · 954 阅读 · 0 评论 -
c++正则表达式限定数据
限定0-2048中的整数#include <iostream>#include <string>#include <regex>using namespace std;int main(){ //regex reg("^(0?[1-9])$");//|(0?20[0-4][0-8]) regex reg("([1-9])|([1-9][0-...原创 2020-04-28 13:12:07 · 477 阅读 · 0 评论 -
c++常用正则表达式汇总
正则表达式Regex(regular expression)是一种强大的描述字符序列的工具。在许多语言中都存在着正则表达式,C++11中也将正则表达式纳入了新标准的一部分。一、校验数字的表达式数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最...转载 2020-04-28 11:59:53 · 2268 阅读 · 1 评论 -
c++重载流运同时实现endl方法
将信息写入文件,可作为简单日志类#include <iostream>#include <fstream>using namespace std;class LOG{public: LOG(void); ~LOG(void);public: bool Init(const char*file, const char*mode); //第一个co...原创 2020-04-17 15:38:48 · 757 阅读 · 0 评论 -
c++ 获取时间戳 与 时间戳转化为时间
//获取系统时间戳毫秒级std::string GetTimeStamp(){ time_t curtime = time(NULL); unsigned long long time = (unsigned long long)curtime; return std::to_string(time);}//时间戳转化为时间 毫秒级std::string Stamp2Time...原创 2020-04-14 16:19:07 · 14844 阅读 · 1 评论 -
c++ 网络字节转换为原始数据 以及 原始数据打包为网络字节序
/*拼接字节转化为long64param1: 数组地址param2: 起始字节下标param3: 结束字节下标return: 拼接值*/unsigned __int64 Hex2long(BYTE *hex_arr, int s, int e){ unsigned __int64 ret = 0i64; for (int i = s; i <= e; i++) {...原创 2020-04-14 16:10:13 · 583 阅读 · 0 评论 -
c11 decltype与auto
#include <iostream>#include <cstdarg>#include <vector>using namespace std;template<typename T, typename D>auto Add(T t, D d)->decltype(t+d) //指明返回类型{ return t +...原创 2020-04-01 17:12:12 · 193 阅读 · 0 评论 -
C++精确到小数点后两位取值
借助Round()四舍五入函数: #include <iostream>#include <string>using namespace std;int main(){ string str = "2.86923e-010"; double qwe = std::stod(str); double ada = round(qwe * 100) / ...原创 2020-02-28 14:26:31 · 6092 阅读 · 0 评论 -
[C++, Basic] C++全局对象构造析构顺序
/* * * Date: 2019.09.07 * */#ifndef _H_H_OBJ_DEF_H_H_#define _H_H_OBJ_DEF_H_H_#include <iostream>class ObjA{public: ObjA() { std::cout << "Construct ObjA" << std::e...转载 2019-12-07 10:50:18 · 269 阅读 · 0 评论 -
C++不要在构造函数和析构函数中调用虚函数
《Effective C++》条款9:永远不要在构造函数或析构函数中调用虚函数 。简要结论:1. 从语法上讲,调用完全没有问题。2. 但是从效果上看,往往不能达到需要的目的。Effective 的解释是:派生类对象构造期间进入基类的构造函数时,对象类型变成了基类类型,而不是派生类类型。同样,进入基类析构函数时,对象也是基类类型。在基类的构造过程中,虚函数调用从不会被传...转载 2019-10-18 10:26:02 · 232 阅读 · 0 评论 -
解析char数组中的float型数据
首先了解下float在内存中的存储状态:float类型占据4个字节,内存占据32位32位就是0-31;且把0当做最高位 ,31当做最低位最高位表示符号位: 1表示此浮点数为负 ,0为正跟着的后8位就是阶码,阶码后面的为尾数共23位。通过上面的了解即可以借助int类型 对float进行解析:(在网络字节序中,高位在前,低位在后)/*拼接字节转化为floatparam1: ...原创 2019-10-15 17:01:36 · 1590 阅读 · 0 评论 -
十六进制字符转long
工程所需,从字符数组中取对应字节数,拼接为int 或者 long(8字节)型返回。(超出8字节整型不考虑)/*拼接字节转化为long64param1: 数组地址param2: 起始字节下标param3: 结束字节下标return: 拼接值*/unsigned __int64 Hex2long(BYTE *hex_arr, int s, int e){ unsigned __i...原创 2019-10-15 16:11:35 · 2906 阅读 · 0 评论 -
C++ vector 的push_back() 以及 内存释放
一、什么是vector?向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接...原创 2019-09-27 16:12:22 · 35360 阅读 · 3 评论 -
关于四字节转换中 int 与 double的区别
最近在项目中,需要处理下位机传回的四字节数据,低字节在前,高字节在后,每四个字节组成一个样本数据。因为后面还需要做某些算法转换需要用到double类型处理,所以在字节处理时,偷懒选择了直接转化为double,然后就导致收到的样本数据进行转化后,遇到负值就错误,而且一个负数也没有,下面记录下原因,当做总结。测试程序:int main(){ //高-低 42949672...原创 2019-08-16 09:17:00 · 691 阅读 · 0 评论 -
对于c++特殊单链表环的应用
对于下面问题,尝试自己尝试进行了编写,当然后期也参考了原作者的部分代码;下面是问题:约瑟夫问题的一种描述是: 编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一转载 2017-10-26 11:46:48 · 179 阅读 · 0 评论 -
关于回调函数应用的理解以及小例子
回调函数做参数,实际上就是定义一个全局函数,在这个函数中完成具体的实现方法;然后在某一个应用方法中,定义一个空方法声明(全局函数的函数指针),类似于声明变量,然后写一个接口函数,将此前声明的全局函数函数的函数指针以及函数所需要的相关参数传递进来,使这个应用方法中的函数指针指向全局函数,然后通过此方法生成的对象就可以调用全局函数了。函数做参数传递:#include #inclu原创 2017-10-26 13:37:20 · 392 阅读 · 0 评论 -
c++环状单链表简单理解(个人见解)
临近年关,公司业务比较少,可以有自己的时间来归纳一些最近学习掌握的知识,仅便于自己目前理解。废话不多说直接上代码:#include #include #include #include #include struct student{ int name; int age; student *next;};int main(){ student*st,*st1原创 2018-01-26 10:23:13 · 1142 阅读 · 0 评论 -
数据存储大端小端的区别
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。下面以unsigned int...转载 2018-04-21 10:36:09 · 1038 阅读 · 0 评论 -
C++基于Windows GDI自己绘制BMP图像
无意中看到这个帖子:http://news.cnblogs.com/n/501488/仿照大神代码研究了一下,自己按照位图格式填充到数据区生成的图片。可能位图信息填充不完善会有缺失,不过确实可以用照片查看器或者绘图打开查看。#include <iostream>#include <Windows.h>#include <cmath>#include <...原创 2018-05-18 16:04:37 · 3585 阅读 · 0 评论 -
C++队列的数组实现
最近做音视频的解码学习。需要用到队列来解析与同步音频与视频帧,又重新研究了一下队列。一个简单的int型队列实现。头文件:#ifndef _CMYQUE_H_#define _CMYQUE_H_ class MyQue{ public: MyQue(int size); ~MyQue(); bool Read(int* num); bool Wirte(int ...原创 2018-05-15 14:33:16 · 4251 阅读 · 0 评论 -
C++队列模板的实现
承接上一篇对列的实现,采用模板的方法,来适应各种类型的对列元素。#ifndef _CMYQUE_H_#define _CMYQUE_H_// class MyQue{// //public: // MyQue(int size); // ~MyQue();// bool Read(int* num);// bool Wirte(int num);//写入// void ...原创 2018-05-15 14:46:26 · 573 阅读 · 0 评论 -
C++类重载写入文件
实现了一个Student类,并重载其运算符流函数。Student.h文件:#pragma once //vs专用防止头文件二次引用#include <iostream>#include <string>#include <fstream>using std::string;using std::ifstream;using std::ofstr...原创 2018-05-22 14:04:43 · 2139 阅读 · 0 评论 -
C++深拷贝与浅拷贝
仅作笔记记录一下;实质就是如果在构造函数中存在内存分配问题,仅单独的 引用对象1 = 对象2,会造成两个实例化的对象内部指针,指向同一块内存资源,当其中对象1 的资源内存释放以后,会导致对象2的指针指向释放区,同时 调用对象2的析构函数的时候导致同一内存区域内存释放两次,从而引发程序崩溃问题。解决办法:显式的实现拷贝构造函数,在其中分配内存,同时拷贝数据。代码详细部分链接:https://blog...原创 2018-05-16 17:10:20 · 127 阅读 · 0 评论 -
C与CPP后缀的文件在编译时的区别
今天又发现了我的一个“不良习惯”,C语言的源文件用C还是CPP做后缀完全视心情而定,今天我就尝到苦头了,工程总是编不过去,准确的说是链接错误,后来发现工程下的文件多是c后缀的,只有一个是cpp后缀的,就把cpp后缀的改成了c后缀,编译、链接,OK了。 在Google上搜索了一圈,发现就这一问题的文章比较少,也不是很系统,所以有了此篇小文,也是为了加深我的印象。 结论...转载 2018-05-23 11:33:46 · 1909 阅读 · 0 评论 -
按位与、或、异或等运算方法
1.按位与运算符(&)参加运算的两个对象,按二进制位进行“与”运算运算规则:0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1 & 1 = 1;例如:3 & 50011 & 0101 = 0001因此 3 & 5 = 12.按位或运算符(|)参加运算的两个对象,按二进制位进行“或”运算运算规则:0 | 0 = 0;0 | ...转载 2018-05-24 10:58:55 · 3751 阅读 · 0 评论 -
C++11 之 lambda表达式
lambda表达式是C++11最重要也最常用的一个特性之一。lambda来源于函数式编程的概念,也是现代编程语言的一个特点。 一.函数式编程简介定义:简单说,“函数式编程”是一种“编程范式”。它属于“结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。 特点:1).函数是“第一等公民”,可以赋值给他其他变量,也可以做为参数,返回值。2).只用“表达式”,不用“语句”。“表达式”是...转载 2018-05-31 15:45:42 · 188 阅读 · 0 评论 -
C++关于补码求原数值
最近有个项目涉及温度传输,两个字节表示,若为负值,则以补码形式上传上位机上位机解析显示,找了一大圈没发现有这个函数,于是自己写了一个,仅两个字节数据位有效。//测试有效#include "stdafx.h"#include <iostream>using namespace std;/*******************************************...原创 2019-01-24 15:27:57 · 2547 阅读 · 0 评论 -
C++单例模式
关于c++单例模式,网上有很多说明,也很详细,多不赘述,最近有个工程,想到了单例模式,结果也没用上,这里记录一下代码,留作备用。头文件:#ifndef _CYCQUEUE_H_#define _CYCQUEUE_H_#include <string>class CycQueue //实现单例模式{public: static CycQueue* getInstan...原创 2019-06-28 15:59:10 · 182 阅读 · 0 评论 -
C语言关于memmove()函数应用
近期工程需要对音频数据进行保存处理,本来想采用环来节省空间,后来发现写指针移动覆盖之前的数据时,读指针的位置太难判断,干脆采用队列的模式,将前面不需要得数据移除,给后边的写指针腾出空间,如此便可保留一定长度数据,且不需管理太多空间操作。想要实现数据的前移操作自然用到了memmove()函数,本来以为数据量如果达到百万级可能会影响效率问题,后来测试了一下,发现处理时间在毫秒级内,所以不用担心了。以下...原创 2019-06-28 16:25:47 · 1028 阅读 · 0 评论 -
BYTE,WORD,DWORD的大小及一些特殊的"高低位宏"
一、定义在VC6.0的Microsoft Visual Studio/VC98/Include/windef.h 里,定义了BYTE,WORD,DWORDtypedef unsigned long DWORD;typedef unsigned char BYTE;typedef unsigned short WORD;在Visual C++ 6转载 2017-08-28 10:25:09 · 731 阅读 · 0 评论