
C/C++
文章平均质量分 83
介绍C和C++的语法
蓬莱道人
半路出家的研究僧
展开
-
C++版本发展史
1. C++ 982. C++ 033. C++ 114. C++ 145. C++ 176. C++ 20原创 2021-06-10 00:02:47 · 8008 阅读 · 5 评论 -
GoogleTest入门
1、编译GoogleTest2、配置工程 2.1 创建工程 2.2 配置GoogleTest3、运行hello world 3.1 源码文件 3.2CMakeLists.txt文件 3.3 编译和运行1、编译GoogleTest 下载googletest:git clone https://github.com/google/googletest.git 编译:$ cd googletest$ cmake -DBUILD_...原创 2021-03-12 21:18:29 · 850 阅读 · 0 评论 -
C和C++的文件操作
1、C的文件操作1.1 不带缓冲I/O 不带缓冲的I/O每次调用都会触发内核中的一个系统调用。这类I/O操作是围绕一个文件的文件描述符来进行的。此类文件操作常用的函数如下表,这些函数及其所用的一些符号在io.h和fcntl.h中定义,在使用时要加入相应的头文件。函数原型 功能介绍 int open(const char *path, int access [, unsigned mode]); 打开一个文件并返回它的文件描述符,如果失败,将返回一个小于0的值。...原创 2021-02-13 22:44:36 · 420 阅读 · 0 评论 -
函数指针和函数对象比较
1、谓词 什么谓词,其实就是一个判断式,说白了就是一个返回bool值的函数或者仿函数。(这里说明了谓词可以有2种形式)几元就是函数有几个参数。(1)一元谓词函数举例如下:判断给出的string对象的长度是否小于6bool GT6(const string &s){return s.size() >= 6;}判断给出的int是否在3到8之间boo...原创 2019-04-17 11:48:42 · 2178 阅读 · 1 评论 -
C++的常用规范(二)
1、类的代码风格2、构造函数、析构函数、复制构造函数、赋值运算操作符3、继承4、多重继承1、类的代码风格 类访问控制块的声明依次序是 public:, protected:, private:,缩进和 class 关键字对齐class MyClass : public BaseClass {public: // 注意没有缩进 MyClass(); // 标准的4空格缩进 explicit MyClass(int var); ~MyClass() {} .原创 2020-12-05 16:25:22 · 813 阅读 · 0 评论 -
C++的常用规范(一)
1、局部变量命名: 变量名一律小写,单词以下划线链接,如:int user_input_size;2、全局变量命名: 对于全局变量的名称通常可以添加g_作为前缀,如:int g_system_time;3、宏定义命名: 一般情况下建议将#defined 后的名称使用全大写模式,如:#define PIE_VALUE 3.141594、文件命名: 文件名全部小写,可以含下划线或连字符,比如:cmd_save_player_info_class.cpp5、...原创 2020-06-23 15:14:13 · 1674 阅读 · 0 评论 -
C++的常用轮子
1、统计程序运行时间#include <sys/time.h>#include <iostream>using namespace std;int main(){ struct timeval start_time, end_time; gettimeofday(&start_time, NULL); sleep(5); gettimeofday(&end_time, NULL); //cost_time的单位原创 2020-06-23 14:53:59 · 970 阅读 · 0 评论 -
C++ 智能指针
1、什么是智能指针2、智能指针的实现3、几种常见的智能指针(1)auto_ptr(2)unique_ptr(3)shared_ptr(4)weak_ptr1、什么是智能指针 几乎每一个有分量的程序都需要“在相同时间的多处地点处理或使用对象”的能力。为此,我们必须在程序的多个地点指向(refer to)同一对象。虽然C++语言提供引用(reference)和指...原创 2019-04-07 11:52:02 · 376 阅读 · 0 评论 -
C++继承与组合的区别
1、继承与组合2、继承和组合的使用场景3、继承和组合的区别4、继承和组合的优缺点(1)继承的优缺点(2)组合的优缺点1、继承与组合 C++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及两个概念,一个是继承(Inheritance),一个是组合(Composition)。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和继承一...原创 2019-04-08 10:11:17 · 4207 阅读 · 2 评论 -
设计模式——单例模式和工厂模式
本文转载于:https://www.jianshu.com/p/c579d9ba80be1、单例模式 确保某一个对象只有一个实例,而且自行实例化并向整个程序提供这个实例。单例模式为什么能保证只有一个实例存在,原因是在于它的构造函数是私有的,你不能去new它,该单例类里面已经实例化好了一个了,并且是static的,并提供一个获取该实例的方法。客户端只能通过该方法获取这个已经实例化好了...原创 2019-04-08 10:43:10 · 607 阅读 · 0 评论 -
C语言中的字符串处理函数
1、strcpy():复制字符串2、strncpy():复制n个字符串3、strcat():连接字符串4、strncat():连接n个字符串5、strcmp():字符串比大小6、strlen():字符串长度7、strset():字符串重置9、memset():内存重置10、memcpy():内存复制(不安全)11、memmove():内存复制(安全)12、...原创 2019-04-02 17:15:38 · 3844 阅读 · 0 评论 -
cin输入不定长的字符串
正常情况下,cin遇到空格结束读取,写个小例子:int main(){ string a; cin>>a; cout<<a<<endl;}输入:hello world输出:hello 如何读取带空格的字符串呢,通常由三种方式如下:1、cin.get(array_name, Arsize):#i...原创 2019-04-02 22:27:15 · 2749 阅读 · 0 评论 -
C/C++中容易造成缓冲区溢出的函数
1、strcpy():字符串复制2、strcat():字符串连接3、gets():从输入流读取字符串到缓冲区4、sprintf():打印字符串到缓冲区5、vsprintf():打印字符串到缓冲区6、scanf系列:从输入流读取格式化字符7、strdup():字符串复制1、strcpy():字符串复制原型:char *strcpy(char *dest, const ...原创 2019-04-15 22:24:00 · 8826 阅读 · 0 评论 -
auto_ptr的两种实现方式
1、旧版auto_ptr的实现方式 最开始auto_ptr的成员变量主要有T* _ptr 和 bool _owner,主要实现原理是在构造对象时赋予其管理空间的所有权,在拷贝或赋值中转移空间的所有权,在析构函数中当_owner为true(拥有所有权)时来释放所有权。template <class T>class my_auto_ptr{private: T* _p...原创 2019-04-13 15:13:26 · 695 阅读 · 0 评论 -
C++中的四种强制类型转换
1、dynamic cast2、const_cast3、static_cast4、reinterpret_cast5、static_cast和reinterpret_cast的区别6、关于算术提升的一些坑1、dynamic cast dynamic_cast操作符将基类类型对象的引用或指针转换为同一继承层次中其它类型的引用或指针。与dynamic_cast一起使用...原创 2019-04-16 22:52:02 · 619 阅读 · 0 评论 -
VSCode的安装和使用
1、VSCode介绍2、VSCode安装和连接服务器(1)安装(2)远程连接服务器3、VSCode进行代码调试(1)编译cpp程序(2)调试cpp程序4、VSCode配置cmake(1)安装cmake (2)调试cmake程序5、VSCode配置python(1)安装(2)运行python1、VSCode介绍 2019 年 5 ...原创 2019-07-13 15:46:44 · 1445 阅读 · 0 评论 -
Scons使用教程
1. 简单编译2.SConstruct文件3.编译多个源文件4. 编译和链接库文件5. 节点对象6. 依赖性7. 环境1.简单编译 源文件:hello.cpp#include<iostream>using namespace std;int main(){ cout << "Hello, World!" &l...原创 2019-07-09 21:23:58 · 21582 阅读 · 0 评论 -
Curl(C++)使用教程
1、Curl简介2、Easy interface3、Multi interface1、Curl简介 libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP,...原创 2019-07-20 12:19:27 · 32028 阅读 · 1 评论 -
C++中二进制、字符串、十六进制、十进制之间的转换
1、十进制和二进制相互转换2、字符串和二进制相互转换3、字符串和十进制相互转换4、十进制和十六进制相互转换5、二进制和十六进制1、十进制和二进制相互转换(1)十进制转二进制int a = 10;bitset<10> bit(a);cout << bit << endl;输出:0000001010(2)二进制转十进制...原创 2019-04-06 21:33:10 · 60236 阅读 · 6 评论 -
构造函数、析构函数、复制构造函数、赋值运算操作符
在定义一个类时,每个类型定义了创建该类型的对象时会发生什么——构造函数定义了该类类型对象的初始化。类型还能控制复制、赋值或撤销该类型的对象时会发生什么——通过特殊的成员函数:复制构造函数、赋值操作符和析构函数来控制这些行为。1、构造函数 构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数,构造函数的工作是保证每个对象的的数据成员具有合适的初值。构造函数的名字与...原创 2019-04-01 17:34:27 · 514 阅读 · 0 评论 -
Makefile文件语法
1、什么是Makefile Makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 Makefile带来的...原创 2018-05-22 16:30:45 · 694 阅读 · 0 评论 -
Makefile中的条件判断与函数
1、Makefile中的条件语句:条件表达式的语法为: <conditional-directive> <text-if-true> endif以及: <conditional-directive> <text-if-true> else <text-if-false> endif其...原创 2018-05-22 19:35:58 · 4830 阅读 · 0 评论 -
Ubuntu安装TensorFlow C++
本文参考TensorFlow官网的安装方法:https://www.tensorflow.org/install/source1、安装protobuf2、安装bazel3、下载TensorFlow源码 4、使用bazel编译TensorFlow,产生我们需要的库文件5、编译其它依赖项6、测试1、安装protobuf protobuffer的GitHub官...原创 2019-02-27 16:51:53 · 7186 阅读 · 4 评论 -
cmake简介
1、cmake和makefile的区别2、cmake编译helloworld3、同一目录,多个源文件的编译4、多个目录,多个源文件的编译5、CMakeLists文件的语法总结1、cmake和makefile的区别 大家都知道,写程序大体步骤为:用编辑器编写源代码,如.c文件 ——> 用编译器编译代码生成目标文件,如.o ——> 用链接器连接目标代码生成可执...原创 2019-02-28 16:32:17 · 785 阅读 · 0 评论 -
C++部署TensorFlow模型
安装好C++版的TensorFlow之后,我们就可以用C++来部署python训练好的TensorFlow模型了。安装C++版的TensorFlow的教程可以参考这里。部署TensorFlow模型主要分为两步,第一步是用python训练模型,然后保存模型为.pb格式的二进制文件;第二步则是在C++中加载python保存的模型并进行预测。1、python训练模型并保存2、使用C++加...原创 2019-03-01 23:08:06 · 12201 阅读 · 2 评论 -
C++语法易错点
1、#include <*.h>和 #include “*.h”的区别: #include <*.h>不会在当前目录中搜索头文件,而#include “*.h”会在当前目录中搜索。#include “*.h”的搜索顺序为: ①先搜索当前目录; ②再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH...原创 2019-02-26 18:54:43 · 953 阅读 · 0 评论 -
protobuffer简介
1、什么是protocol buffers2、protocol buffers的工作流程3、protobuffer和xml、json的区别1、什么是protocol buffers protocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与json、xml相比,protocol buffers序列化后的码流更小、速度更快、操作更简单。你...原创 2019-02-27 11:35:44 · 7715 阅读 · 1 评论 -
Ubuntu安装opencv
1、安装步骤2、hello world项目1、安装步骤 首先去GitHub官网下载opencv的源码然后解压:wget https://github.com/opencv/opencv/archive/3.4.5.tar.gz # 这里我选择3.4.5tar -xzvf 3.4.5.tar.gz安装依赖包:sudo apt-get install build-...原创 2019-03-03 17:11:00 · 267 阅读 · 0 评论 -
C和C++混合编程
1、C程序中调用C++ (1)目录结构如下:├── src| └── main.cpp| || └── image.cpp| || └── head.h|├── CMakeLists.txt| ├── build(2)main.cpp的内容为:#include <stdio.h>#include "head.h"int main(){...原创 2019-03-03 21:39:38 · 285 阅读 · 0 评论 -
多进程、多线程和I/O多路复用三种Web服务器模型
1、多进程模型的优缺点2、多线程模型的优缺点3、I/O多路复用的优缺点1、多进程模型的优缺点(1)优点:1)每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系; 2)通过增加CPU,就可以容易扩充性能; 3)可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 4)每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常...原创 2019-03-04 22:17:34 · 2717 阅读 · 0 评论 -
GDB使用教程
1、GDB介绍2、debug和release的区别(参考)3、基本使用hello world(参考)4、GDB调试命令总结(参考)5、在cmake中使用GDB1、GDB介绍 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比...原创 2019-03-07 22:11:02 · 7994 阅读 · 2 评论 -
C++实现多线程
1、helloworld#include <iostream>#include <thread>#include <mutex>std::mutex display_mutex; //使用互斥锁void foo(int i){ std::thread::id this_id = std::this_thread::get_...原创 2019-03-21 20:00:06 · 852 阅读 · 0 评论 -
C++实现经典内存池
本文转载自:https://blog.csdn.net/K346K346/article/details/495389751、为什么需要内存池技术 通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:(1)因为我们申请的内存块大小不定,申请和释放时间也不相同。 所以这个堆(连续的整个内存块) 会形成零零散散的情况(称为内存碎片)。当频繁使用时会造成大量...原创 2019-03-21 11:25:29 · 459 阅读 · 0 评论 -
C++实现线程池
本文转载自:https://blog.csdn.net/caoshangpa/article/details/803746511、为什么需要线程池技术 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线...原创 2019-03-21 16:52:41 · 36954 阅读 · 16 评论 -
GCC生成动态链接库.so库和静态链接库.a库
我们以上以节中的C语言写的线程池为例,包括三个文件:thread_pool.cpp、thread_pool.h、test.cpp,把线程池组件thread_pool.cpp封装为一个动态链接库或者静态链接库。1、编译生成动态链接库(参考)(1)编译生成.so库g++ -w thread_pool.cpp -fPIC -shared -o libthread_pool.so...原创 2019-03-26 21:39:23 · 3681 阅读 · 0 评论 -
C++的继承与多态
1、继承的三种方式:public、private、protected2、继承中的构造函数和复制控制成员(1)派生类的构造函数(2)复制控制和继承3、虚函数和多态(1)virtual和虚函数(2)派生类到基类的转换(3)纯虚函数(4)虚函数可以是私有的吗?4、构造函数和析构函数和虚函数关系(1)构造函数可以为虚函数吗?(2...原创 2019-04-05 11:52:36 · 561 阅读 · 0 评论 -
C++类对象的内存结构
本文全文转载于:https://blog.csdn.net/fenxinzi557/article/details/51995911(1) 无虚函数继承(2)有一个虚函数继承(3)全部虚函数都继承(4)多重继承(6)菱形继承(7)单一虚继承(8)菱形虚继承(最重要)结论: 在VS中查看类对象的内存布局的方法:右击源文件——>属性—...转载 2019-04-05 17:34:08 · 5087 阅读 · 1 评论 -
Linux中gcc/g++的安装和使用
1、GCC、gcc、g++的区别:(1)三者比较 GCC: GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。 gcc是GCC中的GUN C Compiler(C 编译器) g++是GCC中的GUN C++ Compiler(C++编译器)...原创 2018-04-07 22:33:24 · 25260 阅读 · 0 评论