C++
Just_like_fire
熟练使用C/C++,熟悉python、fortran等编程语言,对前端的html和js也有一定的接触和使用<br>对于vs、pycharm、matlab等软件的使用也十分熟悉<br>熟悉linux环境下的程序开发,也有一定的windows下的开发经验
展开
-
C++单例模式
一、什么是单例单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;具体运用场景如:设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动; 数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;二、C++单例的实现2.1 基础要点全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private) 线程安全 禁止赋值和拷转载 2020-05-13 17:11:08 · 2085 阅读 · 0 评论 -
VS编译出现“意外的标记位于“;”之前;语法错误 : 缺少“;”(在“*”的前面);缺少类型说明符 - 假定为 int”
在VS编译的过程中,出现了类似于下面的错误反复核对代码并没有发现任何语法问题譬如少了‘;’之类的。查了一些文章发现,这几个报错基本都是同时出现的。情况一多数情况下出现这种问题的原因是因为头文件重复包含,即头文件A包含了B,头文件B又包含了A,导致编译器在加载头文件时陷入死循环。解决办法:修改头文件包含,如果两个文件代码确实紧密关联,建议写到一个文件中。情况二...原创 2020-04-01 18:05:34 · 9397 阅读 · 2 评论 -
C++使用函数模板出现“无法解析的外部符号”的问题
之前在使用函数模板的过程中,在类里面定义了一个函数模板,按照普通的类的定义方式,将声明放在了.h文件中,将函数体放在了.cpp文件中,然而编译的时候出现了“无法解析的外部符号”的问题。经过对模板的进一步了解,发现-----C++编译器不支持模板的分离式编译。也就是说,当我们声明和定义一个模板的时候,必须要让声明和定义放在一个文件里,否则编译器会报错。下面细说其中的原理首先,一...转载 2020-03-15 16:18:42 · 3685 阅读 · 1 评论 -
C++(21):线程的参数传递——地址传递和引用传递问题
这几天在使用多线程的过程中,遇到了一个问题,就是线程的引用传递原本是想通过引用改变传递进去的参数, 结果发现传递进去的变量根本没有改变,举个栗子void func(int& a){ a = 2;}int main(){ int a = 1; std::thread t1(func, a); cout << a <<...原创 2019-10-14 11:55:32 · 1216 阅读 · 1 评论 -
C++(14):判断map中key值是否存在
map的使用过程中会有根据map中是否存在某个键值来决定是否向里面赋值的操作,这里介绍两种方式1.find函数iterator find ( const key_type& key );如果key存在,则find返回key对应的迭代器,如果key不存在,则find返回尾后迭代器 .end()。可以参考下面的示例来判断key值是否存在if (mymap.find(key)...原创 2018-12-18 15:30:48 · 78710 阅读 · 2 评论 -
C++(17):map的初始化
关于C++中关联容器map的初始化/赋值有好几种方式1.直接赋值法 map<string, int> m1; m1[string("abc")] = 1; m1["def"] = 2;2.用insert添加 map<string, int> m2; m2.insert({ "abc", 1 }); //使...原创 2019-01-22 10:21:03 · 146349 阅读 · 6 评论 -
基于GDAL库读取GRD数据文件的C++代码
项目需要解析etop数据,都是grd格式文件,可以用surfer软件打开,但是并不适合开发,以及对数据的解析这里基于gdal库提供的接口对grd文件进行读取和解析,代码如下#include <iostream>#include <gdal_priv.h>#include <string>using namespace std;void ...原创 2019-06-20 15:54:48 · 1537 阅读 · 2 评论 -
基于GDAL库读取tiff文件的C++代码
这是基于GDAL库读取tiff文件的C++代码,算是比较基础的数据读取,更深层次的运用需要自己去熟悉和理解他的类以及提供的相关接口(代码中也提供了一段输出tfw文件的方式)#include <iostream>#include <gdal.h>#include <gdal_priv.h>#include <streambuf>#...原创 2019-08-19 16:46:28 · 9523 阅读 · 6 评论 -
基于GDAL库读写shp文件的C++代码
因为项目需要,学习了解了GDAL读取shp文件的方式,贴出代码以供参考我自己封装的包含shp读写操作的类,并不完整,留下了一些接口,有兴趣或者有需要的可以自己补充完整头文件SHP_RW.h#pragma once#include <gdal.h>#include <gdal_priv.h>#include <ogrsf_frmts.h>...原创 2019-08-19 17:04:29 · 5983 阅读 · 41 评论 -
C++(18):获取windows下文件的创建/修改/访问时间
#include <windows.h>#include <stdio.h>//----------- Error Handling Function -------------------void error(LPSTR lpszFunction){ CHAR szBuf[80]; DWORD dw = GetLastError(); snp...原创 2019-09-03 16:56:28 · 2000 阅读 · 2 评论 -
C++基于libxls库读取xls文件
libxls是一个轻量级的读取excel的xls格式的库,只能读不能写和其配套的还有一个xlslib库,只能写不能读可以根据自己的需求选择使用读取代码:#include <iostream>#include <xls.h>#include <xlsstruct.h>using namesapce std;int xlsrea...原创 2019-09-06 14:43:46 · 7240 阅读 · 5 评论 -
C++(19):字符转码UTF8/Unicode/Ascii
字符转码一直是C++编程中的老大难问题,由于不同编码的规则不同,造成中文字符经常出现乱码,这里记录几个常见的字符编码之间的转换代码(C++)UTF-8转Unicodestd::wstring Utf82Unicode(const std::string& utf8string) { int widesize = ::MultiByteToWideChar(CP...原创 2019-09-12 09:25:58 · 2067 阅读 · 0 评论 -
C++(20):线程池的实现和使用
线程池作用线程池能够减少创建的线程个数,线程池的出现着眼于减少线程本身带来的开销线程池适合场景(1)单位时间内处理任务频繁而且任务处理时间短(2)对实时性要求较高。如果接受到任务后在创建线程,可能满足不了实时要求,因此必须采用线程池进行预创建。实现代码代码来自github上的一位大神,只用一个简单的头文件就实现了线程池:https://github.com/progsc...原创 2019-10-10 18:04:34 · 1964 阅读 · 1 评论 -
C++(16):find函数的拓展使用
find 是STL模板库中提供的函数,主要用于字符串的操作find 函数细分为几个不同功能的函数,这里将成对介绍1.find() / rfind()查找第一次出现的目标字符串:void Find(){ string s1 = "Iamleo"; string s2 = "am"; int sub = s1.find(s2);// int sub ...原创 2018-12-21 11:50:07 · 471 阅读 · 0 评论 -
C++(15):获取系统日期和时间
这里准确说是C的用法包含头文件<time.h>需要用到该头文件包含的结构体 tmstruct tm { int tm_sec; // 秒,正常范围从 0 到 59,但允许至 61 int tm_min; // 分,范围从 0 到 59 int tm_hour; // 小时,范围从 0 到 23 int tm_mday; // 一月中的第几...原创 2018-12-21 09:06:32 · 5464 阅读 · 0 评论 -
C++(6):vector的初始化方式
C++中的vector有多种初始化方式,每种方式都有自己的特点和优势,熟练掌握和运用不同的方式能够在实际编程过程中大大提高自己的编程效率。下面逐一介绍各种不同方法。(以下代码默认包含头文件<vector>,同时使用命名空间std)1.下标赋值 vector<string> arr(5); //需要指定元素个数arr[0] = "you";arr[...原创 2018-08-15 18:01:26 · 2170 阅读 · 0 评论 -
C++(3):混用string对象和C风格字符串
如果程序的某处需要一个C风格字符串,无法直接用string对象来代替它。如:string s (“leo”);char *str = s; //错误:不能用string对象初始化char * 为了完成该功能,string专门提供了一个名为c_str的成员函数: const char *str = s.c_str(); ...原创 2018-07-11 15:32:41 · 400 阅读 · 0 评论 -
C++(2):关于string字符串的大小写转换
如何将一个string中的字符全部转换成大写或者全部转换成小写?C++标准目前并没有直接提供这种方法,但是我们可以通过STL的transform算法配合的toupper和tolower来实现该功能。 STL的algorithm库确实给我们提供了这样的便利,开发人员只需要提供一个函数对象,即可实现大小写转换。 transform原型:template < class Inpu...转载 2018-07-09 17:58:26 · 1765 阅读 · 0 评论 -
C++(1):C++11特性decltype关键字
decltype简介我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行。RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应type_info数据,通过name成员函数返回类型的名称。同时在C++11中typeid还提供了hash_code这个成员函数,用于返回类型的唯一哈希值。RTTI会导致运行时效率降低,且在泛型编程中,...转载 2018-07-09 16:49:19 · 238 阅读 · 0 评论 -
C++(4):特殊循环--范围for和迭代器循环
C和C++编程都少不了循环这种最基本的结构,在C中,循环无非for和while,使用的方式主要就是数值自增自减,或者指针前进后退,如int i;for(i=0;i<n;i++){ //循环体}int *p;while(p++ != null){ //循环体}在C++中,当然这两种已然可以使用,不过由于C++中新增了许多类型和模板,因此也加入了其他方式的...原创 2018-08-13 18:03:25 · 5004 阅读 · 0 评论 -
C++(7):push_back、push_front、insert简单运用
之前在介绍vector的初始化的时候有介绍到容器的push_back操作,push_back基本所有容器都支持,而push_front则是有的支持有的不支持。insert和push_back一样,所有容器都支持。这里简单介绍一下三种不同添加元素的方式。1.push_back这个之前有介绍,是在容器尾部添加新的元素vector<int> arr;arr.push_ba...原创 2018-08-16 11:46:48 · 22023 阅读 · 1 评论 -
C++(8):构造string的特殊方法
构造一个string对象有很多种方式,比如常见的几种string s1;s1 = "you are the best";string s2 = "you are the best";string s3("you are the best");string s4 = s1;以上几种都是比较常见的string对象初始化的方式,这里再介绍几种其他的构造方式。1.string s(c...原创 2018-08-16 15:57:23 · 1168 阅读 · 0 评论 -
C++(9):find和substr函数的用法
在C++中,对string的操作中,如果需要在字符串中寻找指定的某个值,如在“dkgjoaidjfajlkbestadsjgoaijdl”这样一个字符串中找一个小字符串“hello”,则可以用到string类提供的find()函数,这个函数在库中进行了多次重载,有几种不同的用法。1.find (const string& str, size_t pos = 0) ; 根据参数构成...原创 2018-08-17 14:28:59 · 2684 阅读 · 0 评论 -
C++(10):关联容器map和set
关联容器和顺序容器有着根本的不通过:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按他们在容器中的位置来顺序保存和访问的。关联容器支持高效的的关键字查找和访问。两个主要的关联容器类型时map和set。类型map和multimap定义在头文件map中;set和multimultiset定义在头文件set中;无序容器则定义在头文件unordered_map和unordere...原创 2018-08-23 14:57:31 · 268 阅读 · 0 评论 -
C++(12):实现单词转换的map程序
这个程序的功能是这样的:给定一个string,将它转换为另一个string,程序的输入是两个文件。第一个文件保存的是一些规则,用来转换第二个文件中的文本,每条规则有两部分组成--一个可能出现在输入文件中的单词和一个用来替换为对应的短语,第二个输入文件包含要转换的文本。程序如下:#include <iostream>#include <map>#include ...原创 2018-09-04 11:16:58 · 638 阅读 · 0 评论 -
C++(11):erase函数
前面的文章中提到过如何向容器中添加元素,这里介绍一个如何删除容器中元素的函数,包括顺序容器和关联容器。就是这个erase函数,基本用法如下:c.erase(p)------------------------------从c中删除迭代器p指定的元素,p必须指向c中的一个真实元素,不能等于c.end()c.erase(b,e)----------------------------从c中...原创 2018-08-30 15:31:41 · 43209 阅读 · 4 评论 -
C++(13):右值引用的解析和使用
C++新标准引入了一种新的引用类型--右值引用。所谓右值引用就是必须绑定到右值的引用。我们通过&&而不是&来获得右值引用。如我们将要看到的,右值引用有一个重要的性质--只能绑定到一个将要销毁的对象。因此,我们可以自有的将一个右值引用的资源“移动”到另一个对象中。一般而言,一个左值表达式表示的是一个对象的身份,而一个右值表达式表示的对象的值。类似任何引用,一个右值引用...原创 2018-10-22 17:42:25 · 348 阅读 · 0 评论 -
C++(5):fstream操作
在C/C++中经常需要对文件进行操作,C中可以采用文件I/O或者标准I/O对文件进行操作。在C++中新增了fstream:文件流操作类fstream对文件的操作更为便捷,这里做简单介绍使用fstream类需要包含头文件 <fstream>具体使用如下:#include <iostream>#include <fstream>#inclu...原创 2018-08-15 17:26:19 · 353 阅读 · 0 评论