C++
我要加油呀
这个作者很懒,什么都没留下…
展开
-
c++线程同步的几种方式
主要有以下几种:(1)事件(Event);(2)信号量(semaphore);(3)互斥量(mutex),也叫锁;(4)临界区(Critical section)。原创 2021-01-26 14:00:10 · 530 阅读 · 0 评论 -
c++读取csv
#include <iostream>#include <windows.h> #include <fstream>#include <sstream>#include <vector>using namespace std;wstring getAppPath(){ wchar_t buffer[MAX_PATH]; GetModuleFileNameW(NULL, buffer, MAX_PATH); .原创 2021-01-26 10:01:19 · 309 阅读 · 0 评论 -
c++中类静态map初始化
test.hstatic map<int,int> m_smap;test.cppmap<int, int> test::m_smap;原创 2021-01-26 09:48:07 · 2158 阅读 · 0 评论 -
InitializeCriticalSectionAndSpinCount()
InitializeCriticalSectionAndSpinCount和InitializeCriticalSection 都是临界区的一种初始化,可是前者多了dwSpinCount参数,这个参数的作用是在进入临界区的时候CPU自选计数为什么要引用这个参数呢?在EnterCriticalSection调用这个参数,如果线程无法获取临界区则会进行睡眠,则CPU则进行线程环境上下切换,这个切换大概需要几千个CPU周期,并且争夺的线程都会调用开销昂贵的WaitForsingleObject,而转载 2021-01-22 15:17:14 · 853 阅读 · 0 评论 -
L,_T笔记(编码格式)
L,将ANSI字符转换成UNICODE字符串,就是每个字符占用两个字节,这将告诉编译器该字串按宽字符保存_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变...原创 2021-01-22 13:39:45 · 135 阅读 · 0 评论 -
c++11之std::function与bind用法
转自https://www.cnblogs.com/heartchord/p/5017071.htmlhttps://www.cnblogs.com/yinwei-space/p/12708871.html类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的原创 2021-01-18 14:21:47 · 476 阅读 · 0 评论 -
关于静态类和静态函数的一些用法
一、静态类静态类与非静态类的重要区别在于静态类不能实例化。它仅包含静态成员,不能使用new关键字创建静态类的实例。主要特性:1,仅包含静态成员。2,无法实例化。3,是密封的。4,不能包含实例构造函数。public static class FB{ public static void aaa { return; } public static ...原创 2020-02-18 14:09:51 · 1253 阅读 · 0 评论 -
vscode + CMake调试c++程序
前文介绍了vscode配置launch.json及tasks.json启动调试的一般方法,现在尝试配合CMake调试。1、vscode安装CMake和CMake Tools插件2、打开project项目文件夹,右下角默认配置,选择gcc编译3、完成后会自动生成一个c_cpp_properties.json,编译命令写在compileCommands.json。目录层级如下:...原创 2019-08-29 16:21:17 · 1626 阅读 · 0 评论 -
CMake基本语法
打算把项目用cmake重新做一遍,笔记待补充cmake_minimum_required(VERSION 2.8.9)project (hello)#输出工程的根目录message(${PROJECT_SOURCE_DIR})set(LIB_SRC hello.cpp)set(APP_SRC test.cpp)#生成库文件add_library(hello_static ST...原创 2019-08-29 14:14:44 · 156 阅读 · 0 评论 -
vscode配置调试c++程序(环境Ubuntu 18.04.1 LTS)
一、安装vscode1、相关扩展插件:2、默认编译环境(gcc,g++已装好),Ubuntu下可直接安装build-essential二、准备好文件夹和程序三、配置debug环境1、配置launch.json文件依次点击侧边栏调试图标,添加配置,选择【C++(GDB/LLDB)】,【g++ build and debug active file】vsco...原创 2019-08-28 14:10:05 · 1042 阅读 · 0 评论 -
c++智能指针复习笔记
/*******shared_ptr:变量出了作用域之后智能指针会析构,引用计数-1,直到为0时销毁对象,调用对象的析构函数,哪怕是出现了异常。*****/ /*******weak_ptr解决循环引用问题*******/ /*******unique_ptr它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr*/...原创 2019-08-22 18:45:21 · 135 阅读 · 0 评论 -
linux下Program received signal SIGSEGV, Segmentation fault
1、将Windows下C++项目移到Linux时,编译ok,运行时报Segmentation fault:仔细查找问题原因,依然是空指针、野指针的读写操作不当造成,可以往初始化方向查找问题。2、例子.h文件list<string> *p_str;.cpp如果没有初始化,在析构时调用if (p_str){ delete p_str; ...原创 2019-07-04 18:58:44 · 1319 阅读 · 0 评论 -
Cstring,string互转(笔记)
string a;a.c_str(); // string -> Cstring (const char *)Cstring b;string B = CT2A(b); // Cstring -> stringint c = 1;string C = to_string(c); // i...原创 2019-07-09 10:43:51 · 276 阅读 · 0 评论 -
c++ DLL导出类和导出函数
一、导出函数背景:导出函数: 在DLL中有一张导出表,其中有一系列函数,这些函数叫做导出函数。这些函数可供外部程序调用,即这些函数都是该DLL的入口点(类似main函数)。不在导出表中的函数,为该DLL私有的函数,外部程序不能调用它们。1、没有__declspec(dllexport),将生成的测试lib库添加到项目中,直接调用,会报错:LNK2019 无法解析的外部符号 "vo...原创 2019-07-03 15:10:27 · 16677 阅读 · 2 评论 -
C1010 在查找预编译头时遇到意外的文件结尾
错误:C1010 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "pch.h"”解决办法:项目属性 -> C/C++ -> 预编译头 ,改为不使用预编译头。...原创 2019-07-03 14:25:50 · 1069 阅读 · 0 评论 -
warning C4273: dll 链接不一致
在编译Dll文件的时候遇到dll 链接不一致的问题,头文件如下:#ifdef TESTDLLEXPORT#define DLLEXPORT __declspec(dllexport)#else#define DLLEXPORT __declspec(dllimport)#endif#ifdef __cplusplusextern "C" {#endifDLLEXPORT...原创 2019-07-03 14:22:27 · 18765 阅读 · 6 评论 -
linux下mysql-connector-c++连接远程服务器失败
最近在将windows项目移植到linux下,碰到诸多问题,先谈mysql-connector-c++连接远程服务器失败问题在windows下: sql::Driver * driver = sql::mysql::get_driver_instance(); auto con = driver->connect(host...原创 2019-02-18 18:04:11 · 357 阅读 · 0 评论 -
std::bad_alloc
最近在把windows c++项目移植到linux下,碰到很多问题1.free时报错:can't open file:malloc.c2.delete时报错:can't open file:...raise.c3.std::bad_alloc几乎全部为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等解决办法:养成良好习惯,对每个指针声明后进行初始化为NULL...原创 2019-02-18 18:25:08 · 950 阅读 · 0 评论 -
C++类的创建
最近有时间总结一下最最基础的东西一、头文件.h写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等#include "RoutingModule.h"#include "Graph.h"#include "GraphCreator.h"//enum 和 struct定义位置enum Status { Undefined = -1, Rest...原创 2019-04-10 13:43:27 · 878 阅读 · 0 评论 -
static/const变量必须在类外初始化
一、C++中,类的静态成员必须在类内声明,在类外初始化,因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员class A{ private: static int a ; // 类内声明};int A::a = 0 ; // 类外初始化,不加static关键字二、同样const常量成员也不能在类里初始化,下边错误class...原创 2019-04-10 13:52:12 · 967 阅读 · 0 评论 -
C++类构造函数初始化列表
C++类中成员变量的初始化有,构造函数初始化列表和构造函数内部赋值两种方式。注:C++初始化类成员时,是按照声明(定义)的顺序初始化的,而不是按照出现在初始化列表中的顺序。一、内部数据类型(char,int……指针等)class A {public: //构造函数初始化列表 A(int a, float b): m_a(a), m_b(b)...原创 2019-04-10 15:00:04 · 347 阅读 · 0 评论 -
c++11:lock_guard与unique_lock
背景:多线程访问同一资源时,为了保证数据的一致性,必要时需要加锁。一、lock_guard 通常用来管理一个 std::mutex 类型的对象,通过定义一个 lock_guard 一个对象来管理 std::mutex 的上锁和解锁。在 lock_guard 初始化的时候进行上锁,然后在 lock_guard 析构的时候进行解锁。这样避免了我们对 std::mutex 的上锁和解锁的管理。二...原创 2019-04-08 13:28:05 · 394 阅读 · 0 评论 -
[c++]socket编程实例
对于TCP连接:1.服务器端1)创建套接字create;2)绑定端口号bind;3)监听连接listen;4)接受连接请求accept,并返回新的套接字;5)用新返回的套接字recv/send;6)关闭套接字。2.客户端1)创建套接字create; 2)发起建立连接请求connect; 3)发送/接收数据send/recv;4)关闭套接字。TCP总结:Server端:create ...转载 2019-04-12 14:12:18 · 404 阅读 · 0 评论 -
最小堆MinHeap以及相关代码
首先个人觉得这篇博客最为形象理解最小(大)堆https://blog.csdn.net/wangyangzhizhou/article/details/84934558然后简易参考代码http://baijiahao.baidu.com/s?id=1603209057054486518&wfr=spider&for=pc最小堆,是一种经过排序的完全二叉树,每一个节点都大于等...原创 2019-04-09 15:15:43 · 632 阅读 · 0 评论 -
C++多态的实现及原理复习
C++的多态性概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类...转载 2019-04-26 18:32:22 · 114 阅读 · 0 评论 -
google开源框架gRPC学习笔记(一)概述
官方文档http://doc.oschina.net/grpc?t=56831gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统,在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调...原创 2019-04-19 10:37:36 · 1379 阅读 · 0 评论 -
google开源框架gRPC学习笔记(二)编译gRPC
上一节准备环境搭好,这一节开始正式编译grpc源码一、打开cmake_gui,source code输入grpc根目录,第二行输入一个新的bin文件(建build提示无法重命名XXX),隐掉目录防止混淆。二、Configure,确定新建目录,选择VS2017(我的版本)+ x64直到log显示done 期间如果遇到“errorinconfigurationp...原创 2019-04-19 14:36:06 · 403 阅读 · 0 评论 -
CMake: error in configuration process, project files may be invalid
在用cmake_gui编译grpc时多次遇到“error in configuration process, project files may be invalid”解决办法:查看log中具体的错误一、log显示:The system is: Windows - 10.0.14393 - AMD64一般是由于编译器配置错误,仔细查找自己的环境二、缺少第三方库也会导致报错(对于...原创 2019-04-19 14:53:47 · 4542 阅读 · 0 评论 -
google开源框架gRPC学习笔记(三)生成helloworld程序
一、定义proto见:grpc\examples\protos\helloworld.protosyntax = "proto3";option java_multiple_files = true;option java_package = "io.grpc.examples.helloworld";option java_outer_classname = "HelloWor...原创 2019-04-19 17:36:51 · 1376 阅读 · 0 评论 -
c++ map的insert插入重复key问题
map的insert方法会忽略重复key,而不是替换int cnt = 0;map<string,int> m_str2id;for(int i=0; i<5; i++) { m_str2id.insert(pair<string,int>("a",cnt)); cnt++;}for(auto it = m_str2id.begin()...原创 2019-06-10 13:33:02 · 22620 阅读 · 0 评论 -
解决cannot open shared object file: No such file or directory
一、linux下调用动态库.so文件时提示:cannot open shared object file: No such file or directory解决办法:1、此时ldd xxx查看依赖缺少哪些库 libmysqlcppconn.so.7 => not found libboost_system.so.1.64.0 => not found2、...原创 2019-06-12 11:24:19 · 156656 阅读 · 22 评论 -
c++动态以及静态调用dll
原创博客:http://blog.csdn.net/ojshilu/article/details/12954957C++调用dll链接库的方式有两种:动态调用(又叫显示调用)、静态调用(又叫隐式调用)。一、静态调用dll 静态调用,又称隐式调用。由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码,Windows操作系统会负责控制DLL导入内存的次数。这种调用方式简单,...转载 2017-10-26 11:35:22 · 382 阅读 · 0 评论