C-C++基础
未来老干部
努力学习,紧跟潮流。
从事linux C++ 服务器开发
展开
-
protobuf C++ 利用反射获取消息内容
protobuf经常会被大家使用,下面演示一下protobuf反射的使用。void PrintProtoMsg(const google::protobuf::Message& message){ const google::protobuf::Descriptor *des = message.GetDescriptor(); const google::protobuf::Reflection *ref = message.GetReflection(); int原创 2020-09-29 12:49:13 · 3184 阅读 · 1 评论 -
iterator转换为reverse_iterator(正向迭代器转为逆向迭代器)
遇到这样一种情形,在set集合中find到某个元素,然后从这个元素,往begin的方向遍历。正常end方向遍历的话,我们可以通过iter != set.end() 作为结束判断。但是往前遍历的话,begin是有数据的,用 iter != set.begin()判断的话,还需要额外进行一次begin元素的操作。实际上我们是可以将正向迭代器转换为逆向迭代器的。举个例子。int main(){ std::set<int> si = {1,2,3,4,5,6,7}; ..原创 2020-09-08 10:02:21 · 1643 阅读 · 0 评论 -
timerfd加epoll实现定时器简单封装
封装了一个使用timerfd和epoll实现的定时器我的思路是定时器类初始化时候直接启动一个线程,线程只负责定时事件触发后派发任务 epoll定时器事件触发的时候,将注册的定时事件投递给任务线程 例子中任务线程使用了一个线程池头文件#ifndef CCTimer_H_#define CCTimer_H_#include "ThreadPool.h"#include <sys/epoll.h>#include <sys/timerfd.h>#includ原创 2020-07-05 11:15:35 · 923 阅读 · 2 评论 -
C++控制台输入支持退格
平时我们写一个小的控制台程序,如果从控制台读取数据的话,输错了是不支持回退的。很多我们使用的软件都是支持的,在github上找了一个C版本的readline,简单封装了一下,供自己平时写小程序使用。github地址:https://github.com/troglobit/editline封装后代码如下:头文件#ifndef HANDLE_MODE_CONSOLE_MODE_H_#define HANDLE_MODE_CONSOLE_MODE_H_#include <std.原创 2020-06-26 22:45:05 · 1047 阅读 · 0 评论 -
C++将一个数据格式化为固定长度的字符串
经常会遇到将数据解析为文本文件的现象,通常因为数据长度的不同导致,可视化效果不好。写一个输入数据获取固定长度字符串的函数,来得到一个固定长度的数据,让格式化看起来好看一些。#include <type_traits>#include <sstream>#include <typeinfo>template<typename T>st...原创 2019-10-16 18:44:26 · 6139 阅读 · 0 评论 -
c++文件打开模式的有效组合
文章来源,https://blog.csdn.net/xxlyyhappy/article/details/6613168 感谢作者!!!打开模式:in:打开文件时做读操作; out:打开文件时做写操作; app:在每次写之前找到文件尾; ate:打开文件后立即将文件定位在文件尾; trunc:打开文件时清空已存在的文件流; binary:以二进制模式进行IO操作;有效组合:并不是所有的打开模式都可以同时制定,有些模式组合是没有意义的,例如:in和trunc,准备读取文件...转载 2020-05-25 08:58:53 · 395 阅读 · 0 评论 -
C++全局对象的初始化顺序问题思考
问题产生: 在代码中的某个头文件定了几个全局的 const std::string ,同时定义了某个类,在类的构造函数中使用了这几个全局变量。该类作为单例模板的成员被使用了,单例的编译在另外一个单元。程序编译链接正常,运行时候segment faultgdb调试const 成员变量,内存不可访问分析该问题需要具备的基础知识:知识一:全局变量、文件域的静态变量和类的静态...原创 2019-12-03 15:43:29 · 1636 阅读 · 0 评论 -
fopen在a模式下,fseek无效
问题起因:之前代码中要把数据写入文件,存在数据更新的情况,原来用的都是unix的read和write函数,更新就使用lseek。为了提高写的效率,打算替换为标准C的fwrite和fseek。由于 fopen的a模式下带有文件不存在自动创建的功能就使用了a模式打开文件,然后在更新的情况下fseek移动文件指针,结果最后发现数据全部被写入了,没有被更新。理论解释:https://zh.c...原创 2019-12-02 15:10:56 · 1311 阅读 · 0 评论 -
C++获取下一天和上一天
根据今天的日期获取下一天的日期,输入日期格式是20190520 的字符串方便自己和别人使用int is_leap_year(int year){ return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);}std::string get_next_day(const std::string&am...原创 2019-09-25 11:49:55 · 2576 阅读 · 0 评论 -
linux用C++获取指定目录下所有文件
#include <dirent.h>#include <sys/stat.h>#include <sys/types.h>bool get_all_files(const std::string& dir_in, std::vector<std::string>& files) { if (dir_in.empty(...原创 2019-06-20 08:56:19 · 4113 阅读 · 1 评论 -
C++数组维度与C99的变长数组(VLA)
问题起因前几天在一个C++学习交流群里边有群友问了一个代码问题,其中它的代码包含了这样的语句int n;scanf("%d",&n);std::string strs[n];看到这样的操作,我没有继续看其他的代码,就直接指出了他的这个问题,我说这种静态数组在编译期就要确定内存大小,你这样肯定有问题,他表示不信,后来他的程序问题找到了并且告诉我,他的这种写法没问题,我当时就...原创 2019-05-20 22:01:43 · 2524 阅读 · 1 评论 -
数据结构学习笔记——链表逆序
作为非计算机专业出身的程序员,虽然相关书籍都有看过,总是零散的阅读,没有进行过系统的学习,所以打算学习的过程中记一些笔记。在做链表操作的时候,如果打断了链表,一般我们要使用 临时变量来记录断点。逆序链表的操作也是一样的。因为要逆序 所以我们要 记录链表的下一个节点(需要一个变量),改变next的指向(新的next 需要一个变量),要移动链表节点(可以不需要)。所以步骤就是:记...原创 2019-05-15 08:50:12 · 247 阅读 · 0 评论 -
enable_shared_from_this的用处
来自Stackoverflow的回答--------转载信息------------作者:wqfhenanxc来源:CSDN原文: https://blog.csdn.net/wqfhenanxc/article/details/80532931很清晰地讲解了enable_shared_from_this所解决的用其他方法无法解决的问题。https://stackover...转载 2019-05-02 12:18:13 · 452 阅读 · 0 评论 -
do{...}while(0)的用法
原文地址:http://blog.csdn.net/majianfei1023/article/details/45246865零.导引第一次见到 do{...}while(0)是在学习libevent的时候,看到里面有很多类似#define TT_URI(want) do { \ char *ret = evhttp_uri_join(uri, url_tmp, si...转载 2019-04-02 09:24:52 · 166 阅读 · 0 评论 -
__sso_string与std::string的区别
在学习muduo库源码的时候在,base文件夹下的type.h有 #ifdef MUDUO_STD_STRINGusing std::string;#else // !MUDUO_STD_STRINGtypedef __gnu_cxx::__sso_string string;#endif就想了解一下__sso_string和std::string 的区别:原创 2017-09-14 11:16:48 · 1390 阅读 · 0 评论 -
(void)变量 的用处
有些变量我们声明之后没有使用,这样编译器会发出警告,或者编译release版本的时候会无法通过,通过加上(void)变量的方式,就可以避免这些问题了int a;(void)a; ...原创 2017-09-11 15:44:00 · 744 阅读 · 0 评论 -
vector 的六种 创建和初始化方法
C++的初始化方法很多,各种初始化方法有一些不同。(1): vector<int> ilist1; 默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。(2): vector<int> ilist2(ilist);vector<...原创 2018-05-22 08:26:39 · 405909 阅读 · 7 评论 -
C++ 左值和右值
****************************************************转自:http://blog.chinaunix.net/uid-693168-id-3453399.html****************************************************这个博客链接无法打开了,转载来源是 http://www.cnblo...转载 2018-10-06 12:47:10 · 163 阅读 · 0 评论 -
C++ operator == 的一些思考
最近写代码的时候,需要重载 == ,以前也没有进行过太多的思考,都是顺手就写了,在这里就总结一下:下面的代码是 应该是重载 == 用的最多的写法了class Demo {public: Demo(int a_):a(a_) { } ~Demo() {} bool operator == (const Demo & rhs) const { return...原创 2018-10-06 17:25:05 · 2670 阅读 · 2 评论 -
模板函数对象当函数使用
分析下边的模板类,在什么情况下返回空指针template <typename T>struct get_visitor{ typedef T* result_type; result_type operator()(T& val) const {return & val; } template <typename U> result_typ...原创 2018-10-06 18:06:14 · 560 阅读 · 0 评论 -
C++使用信号量实现单例模式
java的单例模式可以通过内部类来保证线程安全,C++的代码很多时候(muduo里边在linux下可以使用pthread_once)单例模式还是双判断加锁,信号量也可以实现锁的功能,就当练习一下信号量的使用了#include <pthread.h>#include <semaphore.h>class Singleton{private: Single...原创 2019-01-11 17:09:56 · 352 阅读 · 0 评论 -
unique_ptr使用总结
头文件#include <memory>初始化用原始指针std::unique_ptr<std::string> pName {new std::string{“Hello”}};使用make_uniqueauto pName = std::make_unique<std::string>(“Hello”);//c++14 supp...原创 2019-01-17 19:29:51 · 4417 阅读 · 0 评论 -
C++ union类型的成员是shared_ptr类型
最近在项目中考虑到使用 union 类型,而且要在union类型中使用shared_ptr,就自己做了一个小测试C++的union 和C语言的区别还是比较大de代码如下,使用 union 装vector 、 shared_ptr 等类类型, 必须实现构造函数和析构函数,供大家参考#include <iostream>#include <memory>#...原创 2019-02-02 13:50:59 · 786 阅读 · 1 评论 -
函数参数是右值引用类型,能够接受什么样的参数输入
假设我们有一个函数class Data{};void func(Data && data){}那么func能接收什么样的参数输入情形一Data data;func(data); //[Error] cannot bind 'Data' lvalue to 'Data&&'data是个左值,不能绑定到右值上情形二 ...原创 2019-03-14 19:17:34 · 8112 阅读 · 4 评论 -
std::thread的常用参数传递总结
实参的生命周期给std::thread传递参数的时候要注意,参数是引用或者指针的情况下,要注意生命周期的问题看代码#include <iostream>#include <thread>#include <chrono>#include <fstream>using namespace std::chrono_literals;...原创 2019-03-25 11:28:07 · 17463 阅读 · 0 评论