C++
artzers
这个作者很懒,什么都没留下…
展开
-
【C++】MySQL8初始化疑难解答
MySQL是著名的开源关系数据库,在网站建设、移动APP服务、云计算、科学管理领域都有重要用途。无论以后从事什么方向的IT工作,都要对MySQL有一定的了解。MySQL最新版本号是8,官网提供了绿色包和安装包下载。现在一般都会选择绿色包下载,避免污染系统。但是绿色版MySQL的启动容易遇到问题。现记录一下:找不到VCRUNTIME14_1这里写的是14_1,但是对应VC++2019。安装VC...原创 2020-04-28 22:08:01 · 389 阅读 · 0 评论 -
【C++】Boost.Asio+Serialization 建立RPC demo(服务端)
接上篇blog,RPC服务端主要设计两个主要内容:调用函数进行统一绑定。调用函数参数展开。统一接口的调用。这里我不考虑类成员函数绑定,远程调用不好设计。接收数据服务端能接收的数据存放在char* readBuffer_里面,Boost.Serialization的binary_oarchive对象来恢复传递的函数名字符串、函数参数。服务端根据传输的函数名来调用相应的函数并输入函数参...原创 2020-03-31 22:33:40 · 927 阅读 · 0 评论 -
【C++】Boost.Asio+Serialization 建立RPC demo(客户端)
RPC服务(Remote Procedure Call),可以从客户端要求服务端进行相关业务,从服务端获取相应的答案,调用方法类似普通的函数调用。RPC在分布式系统中的系统环境建设和应用程序设计中有着广泛的应用,比如:分布式操作系统的进程间通讯;构造分布式计算的软件环境;远程数据库服务等。这里尝试用Boost.Asio和Serialization搭建一个RPC demo,编译平台是VS 2017...原创 2020-03-31 17:14:17 · 1188 阅读 · 0 评论 -
【C++】Boost.Serialization疑难解答:缓冲、动态数组等
工作中可能面临如下需求:将结构化数据,比如类,通过网络传输到其他地方。高成本计算得到的数据,要临时保存到磁盘中,希望下一次读取进来直接就是格式化好的数据;而不再需要一个个地读取进来,在内存中重建构建数据结构。我们可以用序列化/反序列化来完成上述任务。序列化是指,将用复杂数据结构构建的数据,变为字符串或者二进制流;反序列化则是相反过程,直接从字符串或者二进制流中完全恢复内存现场。目前常用...原创 2020-03-30 11:38:58 · 1180 阅读 · 0 评论 -
【C++】内外网连接原理与ASIO 代理
参考资料:《Boost Asio C++网络编程》第五章学会网络编程之后,理所当然会有这样的想法:在单位电脑上部署自己写的服务段软件,在家里电脑上部署客户端,从而远程办公。但是实际操作下来可以发现,两台电脑上的ip地址,根本不能建立socket直连,这是为什么呢。内外网连接规则对于普通网络用户,电脑入网都分配的是内网IP。尽管IPv6已经出来多年,目前互联网公网IP普遍还在IPv4阶段,可利...原创 2020-03-28 16:53:13 · 863 阅读 · 0 评论 -
【C++】BOOST ASIO 异步多线程服务端代码分析
参考资料:《Boost Asio C++网络编程》第五章异步多线程服务端是可实际运用服务端软件的最低要求,其用于解决如下基本问题:并发服务中,有用户连接需要服务端执行耗时操作,同时不影响其他用户连接工作。一个显然的想法是,为每个耗时用户连接开启一个工作线程进行耗时操作,在线程工作时不阻塞主线程,线程结束后执行异步回调函数。如果我们直接在工作线程末尾调用回调函数,那么回调函数会在工作线程中而不是...原创 2020-03-28 00:58:40 · 684 阅读 · 0 评论 -
【C++】BOOST ASIO 异步服务端代码分析
参考资料:《Boost Asio C++网络编程》第四章这里将对asio库编写的异步服务端进行解读。异步服务端复杂很多。同步服务端简单来说就是轮询,一般用于业务测试。主函数启动配置环境与客户端一致。主函数:io_service service;ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(), 8001...原创 2020-03-26 23:08:49 · 449 阅读 · 0 评论 -
【C++】BOOST ASIO 异步客户端代码分析
参考资料:《Boost Asio C++网络编程》第四章这里将对asio库编写的异步客户端进行解读。异步客户端比同步客户端更复杂。同步客户端相对简单,实用性不大,一般用于业务测试,基本就是一条线的逻辑代码。环境设置asio客户端项目仅需包含boost.asio头文件,无需导入lib文件:#include <boost/thread.hpp>#include <boost...原创 2020-03-26 19:50:15 · 939 阅读 · 0 评论 -
【C++】Boost开发指南阅读感想
我找了半天的windows下的markdown编辑器,最后发现vs code就是最好的万能编辑器!其他win编辑器的短板:公式都能打。Boost是C++的准标准库,极大丰富了C++的功能,其中有一些部分会在以后纳入C++标准库,学了有好处。之前用Qt5作为项目框架,比较了下qt5和boost,发现qt5某种意义上也是一个“boost”,提供了C++很多扩展功能,所以这里也放进来比较一下。第1...原创 2020-03-19 16:07:30 · 212 阅读 · 0 评论 -
【C++】网络编程小总结
这几天抽空看了boost.asio,对网络编程有个大概的了解,记录如下:网络库C++常用编写网络项目的库有ACE,boost.asio,libev,libevent,libuv,POCO,cpp-netlibe,等等。按照大众认知,ACE是很重量、复杂、难用的库,超大型项目可能要用,普通的应该没必要。轻型的、要造很多额外轮子就是用libev,libevent等几个作为网络项目基础,这几个其实是...原创 2020-03-18 17:55:54 · 296 阅读 · 0 评论 -
【C++】C++11特性:右值引用与转发
右值引用的用途有:- 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。- 完美转发原创 2016-10-02 23:37:37 · 607 阅读 · 0 评论 -
【C++】C++避坑经验谈:数组、vector
要给新人培训C++,奈何大家的时间是分散的,所以在这里开坑写文章了。这里只是个人经验,如果我也坑了的话请勿喷。一、指针很危险? 二、数组还是std::vector?三、什么时候用vector?原创 2016-12-06 15:41:27 · 4169 阅读 · 0 评论 -
【C++】C++避坑经验谈:资源管理类、智能指针
前面提到,C++中尽量不要使用指针。在代码量变得很高的情况下,程序猿很容易错误使用指针。为此,我们可以利用C++的类和智能指针来管理资源。这两者是相辅相成的。他们称为RAII技术。原创 2016-12-08 13:02:43 · 1932 阅读 · 0 评论 -
【C++】More C++ 模板推导
进入C++11时代,大部分流行的库都支持了C++11的新特性。C++11的新特性虽然有时候被诟病为语法糖,但是确实对开发很有助力,甚至有时候跟脚本语言的简洁度有的一拼了。其中自动模板推导是C++11的惊艳功能之一,如果仅仅知道auto和decltype是不够的。以下笔记均以vs2013为准。原创 2017-06-29 14:08:31 · 656 阅读 · 0 评论 -
毁三观的C++:牛逼碉堡的lambda
大家都知道java和C#有for each这个命令吧,这个命令十分好用for each(单个元素 it in 容器){每个元素的操作;}昨天看了boost库的lambda和一些博客,瞬间毁掉我对C++的看法,原来用了lambda,这些功能可以轻松实现!!比如显示vector容器vec的数据,然后加上4,再全部显示,正规代码这样写:std::copy(vec.be原创 2013-03-13 13:21:09 · 1114 阅读 · 0 评论 -
【图像处理】VTK二维图像标记bug修正
实现始终面向用户的二维图像表示。原创 2017-07-11 20:20:19 · 834 阅读 · 0 评论 -
【C++】Vs2008中使用智能指针
Tr1模块是C++11正式诞生前夕,已经确定加入新标准的C++特性。Vs2008算是C++11标准正式诞生前夕,对C++03和tr1标准支持的最好的一个IDE,是相当经典的一版,很多程序的开发和维护都还是使用vs2008。Vs2008要使用tr1标准,需要安装sp1补丁;在代码中使用tr1标准,需要加入tr1::前缀,如std::tr1::shared_ptr。符合C++11标准的编译器则可以直接原创 2016-04-15 16:07:16 · 2853 阅读 · 0 评论 -
【C++】C++对象内存模型简介
C++相比C,增加了class类特性,用于封装数据和方法。C和C++都有struct结构体。C中的struct纯粹是数据和函数的集合。而C++中的struct则相当于另外一类class,与class的区别是,class如果没有关键字,默认成员为私有,struct则默认为公有;如果显式指定私有公有等关键字,则C++的struct和class几乎没有区别。我们来看看C++如何将数据和方法封装在一起。原创 2016-04-18 20:21:26 · 629 阅读 · 0 评论 -
【机器学习】C++调用Python3教程
背景 实际项目中我用的都是C++语言,因为涉及到高性能计算,所以其他听起来牛逼的语言只能用来打下手。现在遇到的一个项目,其深度学习模块是用python语言编写的,现在很多深度学习库都提供了python支持,但是很少有C++支持,就算有C++支持,在windows上编译也有一大堆问题(你说普通人会用Linux?)。幸好python是所谓的胶水语言,能够和C++兼容工作,所以就着手试验C++调用...原创 2018-04-20 13:35:54 · 3133 阅读 · 1 评论 -
【机器学习】C++与OpenCV、Tensorflow-python联合调用
上一篇我介绍了C++调用Python的入门方法。这一篇我讲述C++与OpenCV、Tensorflow-python联合调用的一次成功的实验过程。 C++通过python调用tensorflow,比调用C++版本的tensorflow的优势在于:tensorflow环境依赖python环境,python环境几乎是一键傻瓜式操作,各种库依赖的问题,比直接使用tensorflow-C++少得...原创 2018-04-20 21:43:27 · 4169 阅读 · 1 评论 -
【C++】《C++标准程序库》小结第十二章-数值
(一)复数1、复数相关算法少,请移步科学计算库。2、C++中使用复数complex需要#include 。复数普通表现形式为a+bi,也可以通过polar函数转化:complexc1(4.0,3.0);complexc2(polar(5.0,0.75));//极坐标转化,模和幅角注意,complex可以隐式转化到低精度,但反之没有,必须显示。3、complex输入时,需要打原创 2016-03-30 21:04:37 · 487 阅读 · 0 评论 -
【C++】C++11特性:初始化、hash容器和随机数生成器
声明类的成员变量的同时可以赋值,无须去构造函数赋值。容器可像栈数组一样初始化。STL中的hash容器有unordered_map, unordered_multimap, unordered_setC++11提供了一个真随机数算法,平时使用伪随机数就够了。C++11随机数生成需要一个随机数生成器和一个随机分布类。原创 2016-10-02 14:45:49 · 2052 阅读 · 0 评论 -
【C++】C++11特性:模板推导和循环区间
模板推导C++11在template编程的领域有很大的更新,功能愈发强大了,引入变参模板、外部模板等新功能,大大增强了模板编程的能力,其中新特性Tuple元组使用了变参模板特性。其中用的最多的,是模板推导。对于一些已经明确知道是什么类型的变量,C++11允许我们用auto关键字来自动推导类型,decltype来获取变量类型.原创 2016-10-02 13:07:15 · 786 阅读 · 0 评论 -
【C++】《C++标准程序库》小结八章-仿函数
1、仿函数有很多名字,比如函数对象,functional objects,functor,这些都是指代一个东西。2、仿函数的优势是可以保存状态,其表面实现方式是在class对象内部重载operator()函数,模仿了函数foo()的形式来实现函数功能。比如void foo()转换成functor的基本形式:class FunctionObejectType{public原创 2016-03-18 22:54:01 · 423 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第九章-算法
1、普通算法在,有一部分数值算法在,比如accumulate。2、有很多算法,具有多种特性,比如for_each()算法,既是非变动算法,也是变动算法。对于这些问题不要深究。3、一般情况下,仿函数的operator()应该为const,不然会有很多问题。很多算法都要求仿函数不能改变自身状态。4、下面的表格是手打的,累死了。 函数功能说明原创 2016-03-19 11:31:26 · 457 阅读 · 1 评论 -
【C++】《C++标准程序库》小结第十章-特殊容器
(一)stack堆栈a) LIFO后进先出。一般只有三个接口有用:pop(), push(), top()。b) 可以自己制作一个,一般封装deque,原因是deque释放元素就直接释放了内存,符合堆栈特性。 (二)queue队列a) FIFO先进先出。核心接口:push(), pop(), front(), back()。b)原创 2016-03-21 12:24:34 · 279 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第十一章-String
1、追求性能,底层编程的时候,用char。追求方便安全,应用编程的时候,用string。2、string相当于char的类封装。尽量使用string的成员函数,不要使用外部STL算法函数。3、string::npos相当于string的末尾标记,类似于char的’\0’,类似于STL的coll.end()。注意返回值最好是string::size_type,绝对不可以用unsigned i原创 2016-03-29 19:07:09 · 387 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第十三章-stream(1)
本章内容太多,分多次写完。这里存在的一个争议就是,是选择标准stream还是传统的C输入输出函数?就性能而言,毫无疑问C函数要高,但是普通的测试下,stream和C函数的性能差距没达到10倍以上,因此普通应用场景下两者并没有区别。stream优势在于使用模板编写,数据通用性强,尤其是可以解决国际化问题。操作便利程度而言,两者各有千秋。总的来说做应用用stream,做底层和高性能用C原创 2016-03-31 13:55:22 · 521 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第十三章-stream(2)
(五)标准输入函数1、输入函数。cin成员函数读取直到遇到...字符数添加结束符返回get(s,num)EOF,不包括EOF最多num-1是istreamget(s,num,t)t或EOF,不包括t和EOF最多num原创 2016-03-31 14:17:59 · 713 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第十三章-stream(3)
(十)StringStream Class1、不要用char*版本。2、操作和fstream一模一样成员函数意义str()将缓冲区内容作为string返回str(string)将string设置为缓冲区内容str(“”)删除缓冲区tellg()原创 2016-04-01 10:31:59 · 702 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第十五章-自定义空间配置器
第十四章是国际化议题,解决不同地区因为文化差异,产生的输入与输出问题。这对于我暂时没有用,而且还有更好的第三方库可以解决这个问题。 (1)怎么使用配置器配置器是容器的内存管理工具,实际的内存分配、初始化、销毁、回收工作由他干。C++的配置器继承自allocator类,这是个模板类可以自己设置内存元素大小,所以我们不用关心到底要分配多少字节。代码效果原创 2016-04-05 15:17:13 · 479 阅读 · 0 评论 -
【C++】《C++标准程序库》小结七章-迭代器
1、基本迭代器类型:输入input,输出output,前向forward,双向bidirectional,随机random-access。2、临时迭代器是可以直接递增、递减的,但是vector,string不行,因为他们的迭代器可能是指针。a) 错误:sort(++coll.begin(), coll.end());b) 正确:vector:原创 2016-03-18 21:18:54 · 437 阅读 · 0 评论 -
【C++】《C++标准程序库》小结第六章(容器)
总论1、容器中的元素,必须具备以下条件:a) 可以复制,有复制构造、operator=函数(这两个标准上都要求必须写)。因为容器添加的元素是复制的副本,这时候改变任何一个,都不会影响另外一个,故auto_ptr是不可用的。有时候为了节约成本,或者就是希望改变容器元素来相应改变原来的数据,可以放入原始数据的指针,不过一个巨大的问题就是很容易发生资源泄露,所以Effec原创 2016-03-16 13:23:27 · 529 阅读 · 0 评论 -
【C++】《C++标准程序库》重难点分析(一)~(五)章
(一)关于本书1、一些简介。C++最强大之处在于泛型编程,OO只是一个亮点。要做OOP请去Java\C#。(二)标准库介绍1、C++的特性,很多书都有介绍,略看2、算法复杂度,请看《算法导论》(三)一般概念1、重点是明白异常处理的重要性,这是为什么要用标准库的一大原因。(四)通用工具1、Pairs(对组)是很简单的东西,可以自己做一个。以后的重点是Tuple(元组)原创 2016-03-09 14:44:22 · 668 阅读 · 0 评论 -
【C++】C++11特性:lambda和function
C++11是C++发展历史上的一个重大版本更新,引入了不少新的现代编程语言特性,可以直接实现的编程范式更多,语言本身有点向Java、Python等语言靠拢。然而C++由于应用的太广泛,过去很多使用C++旧版本的项目还运行在各行各业的电脑上,不会轻易升级;此外C++11毕竟年轻,能否经得住工业级别应用的考验还是个问题。毕竟现在技术的更新换代太多,C++领域总的趋势是向新版本靠拢。原创 2016-10-01 20:05:24 · 918 阅读 · 0 评论 -
【机器学习】windows版caffe深度学习库编译
caffe主要版本是基于Linux的,其Windows版本是由微软提交维护的。编译caffe的最低要求VS版本为2013,一开始让我很诧异,难道微软要用什么黑科技么?这让软件开发和推广很有难度啊。不多说了,先git clone下来再编译。原创 2016-07-23 09:17:35 · 1479 阅读 · 0 评论 -
【可视化】VTK的图层结构与置顶显示
为了让面模型始终显示,而不被体绘制模型遮挡原创 2016-08-03 20:33:40 · 5699 阅读 · 21 评论 -
【C++】灵活使用C/C++宏定义
灵活使用宏定义 #define宏定义在C语言中有广泛使用。对于C++语言,《Effective C++》第二章告诉我们,在C++中尽量用const、enum、inline替换#define,可以避免很多陷阱。尽管《Effective C++》第二章指出#define宏定义的诸多陷阱,这不代表作者不希望我们使用#define宏定义原创 2016-05-31 20:36:45 · 2414 阅读 · 0 评论 -
【C++】《More Effective C++》读书笔记(转载+修订)
条款1:指针与引用的区别二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以;指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变。类可以定义一个引用成员,前提是构造函数中会对引用对象进行指定。在以下情况下使用指针:一是存在不指向任何对象的可能性;二是需要能够在不同的时刻指向不同的对象在以下情况使用引用:总是指向一个对象且一旦指转载 2016-04-08 21:29:51 · 500 阅读 · 0 评论 -
【图像处理】小谈体绘制可视化
我过去三年的三维图像处理工作,涉及到了不少领域。为了提升处理速度,我大力学习C++和并行化;为了快速调试查看结果,我学习了计算机三维可视化,把面绘制和体绘制都研究了一遍。这里我把我所学的体绘制可视化知识,粗略说一下。原创 2016-06-28 16:22:52 · 2324 阅读 · 2 评论