
C/C++
文章平均质量分 82
跃祥666888
方向对了,再慢也是前进
展开
-
VS2015 配置2.6.1版本的protobuf环境并测试实例
一、runtime首先从官网下载proto2.6.1的版本解压缩后,进入vsproject工程,打开后缀.sln的工程,基本环境只需要生成libprotobuf这个项目对应的lib库文件,配置项目如下:(大部分工程配置官方已经配好了,可直接编译,2015版本需要添加如下的预处理定义):在win32下添加值为:_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS然后编译生成即可,得到对应的库文件。根据官方reademe文件指示,在需要读取protobuf时需要配置ru原创 2021-01-28 10:30:27 · 432 阅读 · 0 评论 -
判断cpu处理器是大端还是小端
int check1(){ union w { int a; char b; }c; c.a = 1; return (c.b == 1);}int main(){ int ret = check1(); cout << ret << endl; return 0;}如果输出0则代表大端。如果输出1则代表小端。...原创 2019-12-09 18:56:00 · 469 阅读 · 0 评论 -
关于C语言浮点类型转换格式的说明
在printf中:%f表示输出float或double类型%Lf表示输出long double类型,注意是大L,无小L,小l只和整形转换说明一起使用在scanf中:%f表示将输入的值存储为float类型%lf表示将输入的值存储为double类型,注意是小L%Lf表示将输入的值存储为long double类型,注意是大L...原创 2019-10-17 13:06:49 · 933 阅读 · 0 评论 -
C++中分割输入行中带逗号的字符串-stringsteam类的使用
#include <iostream>#include <vector>#include <string>#include <sstream>using namespace std;int main(){ string s; while (cin >> s)//输入一串用逗号分隔的字符串 { vector<s...原创 2019-08-23 00:27:31 · 3807 阅读 · 0 评论 -
C++开辟动态二维数组的几种方法总结
一、用 new 来动态开辟一个二维数组int **p = new int*[m]; //m行n列型for (i = 0; i < m; ++i) { p[i] = new int[n]; for (j = 0; j < n; ++j) scanf ("%d",&p[i][j]);}二、用vector来动态开辟一个二维数组首先介绍一下容器的方法:a.re...原创 2019-08-16 19:52:57 · 10808 阅读 · 0 评论 -
vector中erase的两种常见错误
//在循环中使用erase需要避免的错误//erase的函数原型有两种形式://iterator erase(iterator position);//iterator erase(iterator first, iterator last); 左闭右开 [first,last)vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...转载 2019-08-16 02:33:42 · 4549 阅读 · 2 评论 -
C++之string类中npos变量的取值
npos取值为unsigned int或unsigned long的最大取值我的VS编译器是用的无符号int,32位 取值为4294967295 即FFFF FFFF因此:unsigned int len = npos;那么len将取值为4294967295int len = npos;那么len将取值为-1,32位全1,当做有符号数看的话,将是-1,首位是符号位,后面31位是补码,换成原...原创 2019-08-07 01:21:47 · 654 阅读 · 1 评论 -
Ubuntu 16.04 Linux系统下使用C++连接mysql数据库
Ubuntu安装mysqlsudo apt-get install mysql-server,mysql-client,libmysqlclient-dev安装的时候会提示你设置数据库的密码安装结束后验证是否成功:sudo netstat -tap | grep mysql如果有关于mysql的字出现,就安装成功了。c++连接数据库专用的mysql.h头文件#include ...原创 2019-08-08 00:45:10 · 829 阅读 · 0 评论 -
关于信号量和互斥量协调操作的说明,以防死锁
生产者模型:消费者模型:必须先操作信号量来查看缓冲区是否可以被操作,之后才能获取缓冲区的使用权(加锁),如果上面检测信号量和加锁反过来,那么将导致死锁。例如生产者生产完消息直接对缓冲区加锁,声明主权缓冲区只能由自己使用,然后再查看有没有空间能放消息了,如果这时候消息队列满了,那么生产者将等消费者消费一个消息才能放入,但是消费者将检测到互斥量mutex被加锁了,也就是缓冲区被别人使用了,...原创 2019-07-25 16:06:16 · 598 阅读 · 0 评论 -
多线程编程
1.背景知识 Linux没有真正意义上的线程,它的实现是由进程来模拟,所以属于用户级线程,位于libpthread共享库(所以线程的ID只在库中有效),遵循POSIX标准。 Windows下有一个真正的数据结构TCB来描述线程。 &n...转载 2019-07-25 14:21:56 · 111 阅读 · 0 评论 -
Github仓库命名规范
Github仓库命名规范命名规则 :GIT库名一律采用项目名-类型-年月的形式。其中对项目名的规范如下:库名中不得出现下述规定的字符- \ @ ! # $ % ^ & * () [] {} | \ ; : ‘’ ’ , 。 《 》 < > · ~ 。库名应尽量避免使用 名.名的形式。库名应尽量使用英文,禁止使用中文字符。一般情况下,库名中出现的各个单词的首字母应使...转载 2019-07-20 18:58:10 · 2851 阅读 · 0 评论 -
C++临时对象、复制构造函数以及析构函数的关键点分析
class human{public: human() { human_num++; } static int human_num; ~human() { human_num--; print(); } void print() { cout << "human num is : " << human_num << endl...原创 2019-07-17 20:19:17 · 297 阅读 · 0 评论 -
关于STL标准模板库的函数
next_permutation:找下一个排列的函数(排列组合的排列)第一个排列是容器自身,这个函数修改容器自身使之变成下一个排列如果有下一个排列就返回true,没有下一个排列就返回false,最终的排列是字典序。int main(){ vector<int> s{ 1,2,3 }; do{ cout << "排列:"; for (int x : ...原创 2019-05-22 17:32:51 · 245 阅读 · 0 评论 -
C/C++指向多维数组指针的详解,内容精简,通俗易懂
void *p1;const char* a1 = *((const char (*)[9])p1);p1是函数中的形参,类型是void*;要将她赋值给a1,要进行强制类型转换。char (*)[9]使p1指向一个内含9个char型元素的数组p1就变成了数组的指针。用*号解引用该指针,就变成了一级指针,从而跟a1类型相匹配了。...原创 2019-04-17 11:43:20 · 1196 阅读 · 0 评论