C++知识点
Coldestmonth
这个作者很懒,什么都没留下…
展开
-
c++ 实现一个简单的自定义报文协议
将发送的数据按照长度和body的方式一次放入一个大的buffer中,4个字节存放body长度,后面存放报文,依次放入数据。后续如果想要存储复杂类型,可以拓展头部信息,比如数据类型等。原创 2023-08-25 18:42:06 · 455 阅读 · 0 评论 -
linux下调用cuda接口获取gpu显存使用率和gpu使用率
linux下调用cuda接口获取gpu显存使用率和gpu使用率#include <iostream>#include<string>#include<unistd.h>#include "nvml.h"using namespace std;int main(){ nvmlReturn_t result; unsigned int device_count, i; // First initialize NVML library原创 2021-04-29 16:39:11 · 2148 阅读 · 0 评论 -
后端开发面试题
后端开发面试知识点大纲:语言类(C++):关键字作用解释:volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。Volatile关键词的第二个特性:“不可优化”特性。volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中的指令,一定会被执行。Volatile关键词的第三个特性:”顺序性”,能够保原创 2021-04-19 11:30:16 · 1338 阅读 · 0 评论 -
c++11新特性-可变参数模板
在c++11中声明可变函数模板需要typename或者class后面跟上"…".省略号有两个作用:1.声明一个参数包,这个参数包可以有0到任意个参数2.在模板定义的右边,可以将参数包展开成一个一个独立的参数可变函数模板的定义:template <class... T>void f(T... args) { std::cout << sizeof ...(args) << std::endl;}int main(int argc, char* argv[原创 2021-04-12 22:33:23 · 319 阅读 · 0 评论 -
c++读取json配置文件
这里写自定义目录标题conf.hconf.cctest.jsontest.cc输出:conf.h基于rapidjson封装,只需要引入rapidjson头文件即可使用#ifndef _CONF_CONF_H#define _CONF_CONF_H#include <string>#include <typeinfo>#include <vector&g...原创 2020-03-22 18:13:00 · 1527 阅读 · 0 评论 -
mxnet使用模型预测的初步心得
主要步骤:加载模型结构json文件加载模型参数params文件加载标签synset.txt文件创建predictor或者predictor handler加载目标文件预测(predict)获取预测结果如果是分类预测模型,则需要根据输出的向量取出最大可能的位置,根据synset文件确定分析结果输出预测结果上述步骤mxnetAPI:mxnet的API对于c++开发者来说分为...原创 2019-11-01 14:07:02 · 742 阅读 · 1 评论 -
grpc简介与安装
grpc 简介gRPC是google推出的一款基于HTTP/2协议封装,使用protobuf3编解码消息体的开源rpc框架。rpc就是远程过程调用 (Remote Procedure Call)。简单地说,就是在本地调用远程服务器上的服务,gRPC基于以下理念: 定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用...原创 2019-10-21 18:21:42 · 1018 阅读 · 0 评论 -
C++ grpc实现异步回射服务器
在上一篇博客中我使用grpc实现了一个同步的回射服务器,点击查看废话不多说,直接上代码echo_async_sample_server.cc#include <iostream>#include <memory>#include <string>#include <thread>#include <mutex>#incl...原创 2019-10-17 15:25:58 · 1876 阅读 · 0 评论 -
c++ grpc实现一个简单的回射服务器
grpc 的安装C++使用grpc首先需在电脑上安装grpc和protobuf,grpc的安装只推荐使用下面方式安装依赖配置工具:build-essential, autoconf, libtool测试支持:libgflags-dev编译工具:clang, libc+±dev从官方仓库克隆并编译安装git clone https://github.com/grpc/grpc...原创 2019-10-16 11:11:10 · 1139 阅读 · 0 评论 -
muduo库学习篇-学习目的和计划
从今天开始大概打算花一两个月的时间把陈硕大神的muduo库进行学习,此次学习muduo库主要有下面几个目的:通过学习muduo库里面的各个基础库,强化自己对c++编程的理解和运用通过学习muduo网络库加强自己对linux网络编程的理解通过学习muduo库,加深自己对c++类设计学习主要分为下面几个阶段:学习muduo库各个基础组件学习muduo网络库组件muduo库的使用最...原创 2019-05-22 18:45:39 · 1500 阅读 · 1 评论 -
c++实现的阻塞队列
阻塞队列(block_queue)什么是阻塞队列:在多线程编程时当有多个线程访问一个队列时如果队列为空,则获取队列中元素的方法就会阻塞,直到队列中有元素可以获取解决的问题:队列的线程安全问题队列多线程取元素时的轮询判断问题什么情况下需要阻塞队列:在c++标准库STL中常用的队列容器都不是线程安全的,我们在多线程编程时总会有类似于生产者消费者这种模型,在这种模型下我们访问队列...原创 2019-05-07 13:45:59 · 4414 阅读 · 3 评论 -
C++设计模式-迭代器模式
迭代器模式迭代器模式:提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。适用性:访问一个聚合对象的内容而无需暴露它的内部表示支持对聚合对象的多种遍历为遍历不同的聚合结构提供一个统一的接口角色:Iterator(迭代器):迭代器定义访问和遍历元素的接口ConcreteIterator (具体迭代器):具体迭代器实现迭代器接口对该聚合遍...原创 2019-05-06 16:12:34 · 144 阅读 · 0 评论 -
C++设计模式-观察者模式
观察者模式观察者模式:观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。观察者模式(Observer)完美的将观察者和被观察的对象...原创 2019-05-06 15:33:10 · 155 阅读 · 0 评论 -
设计模式之简单工程模式
简单工厂设计模式:设计模式不是语法,是一种巧妙的写法,能把程序变的更加灵活。架构模式比设计模式大,架构模式是战略,设计模式是战术。 设计模式分为3种:创建型,行为型,结构型简单工厂设计模式属于创建型设计模式,但不属于23种设计模式范围内,属于23种设计模式中工厂方法的入门模式,又叫静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂设计模式的好处是隐藏对象...原创 2018-09-11 18:45:06 · 602 阅读 · 0 评论 -
muduo库学习篇-Thread类学习
多线程编程在任何语言中基本都是一个绕不开的话题,如果我们想要发挥计算机多核的优势,提高程序的响应速度,就一定要使用到多线程编程技术。因此muduo库一定少不了thread的封装,接下来我们开始学习muduo库thread类的封装。如果让我自己设计一个thread类的话我能想到的有哪些:成员变量:线程ID、线程回调函数指针成员函数:线程的创建(构造函数)、线程的回收函数、线程分离函数上面...原创 2019-05-29 21:23:06 · 640 阅读 · 0 评论 -
设计模式之代理模式
代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。组成:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑...原创 2018-09-12 21:23:11 · 461 阅读 · 0 评论 -
muduo库学习篇-Timestamp类的学习 时间类
在平时的开发中,我们经常会遇到很多和时间有关系的代码,因此在muduo库中,作者也设计了Timestamp类,来对时间的使用头文件:// Use of this source code is governed by a BSD-style license// that can be found in the License file.//// Author: Shuo Chen (che...原创 2019-05-22 19:59:40 · 556 阅读 · 0 评论 -
muduo库学习篇-AtomicIntegerT模板原子类的实现
为什么需要原子操作:在我们平时工作中总会有i++这种类似的代码,这样的代码在不涉及多线程编程的时候是没有问题的, 但是一旦在多线程编程中变量i是一个全局变量的话,那么就会很容易出现错误。因为i++不是原子操作,一个i++分为以下几个步骤i从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内存地址,当一个线程执行一半的时候,i的使用权被另外的线程拿去,那么得到就不是我们想要...原创 2019-05-27 23:33:11 · 240 阅读 · 0 评论 -
muduoku 学习篇- condition类学习
在上一篇博客学习了muduo库对线程的封装,并且留了一个小尾巴,在muduo的线程类里面有一个成员变量是CountDownLatch类型,打开这个类可以看到这个类主要是对条件变量的封装。所以先学习muduo库对条件变量的封装。conditon.h#ifndef MUDUO_BASE_CONDITION_H#define MUDUO_BASE_CONDITION_H#include "mud...原创 2019-05-30 19:54:18 · 294 阅读 · 0 评论 -
mudu库学习篇-mutex类封装学习
muduo库是高并发的linux网络编程库,那么就一定有mutex对mutex类的封装,在多线程的编程中,线程间经常会操作一些全局变量,因此我们就需要一些同步的机制,我的上一篇博客condtion算是一种,当然了conditon一般都是和mutex来结合使用。接下来我们看看muduo库对mutex的封装mutex.hnamespace muduo{// Use as data membe...原创 2019-06-01 14:40:49 · 689 阅读 · 5 评论 -
muduo库学习篇-threadPool类的封装
在多线程编程中一般情况下,我们都会使用到线程池,因此muduo库也有对线程池的封装,接下来我们看看muduo库对线程池的实现,基本上和大部分的线程池的实现,大同小异。ThreadPool.h// Use of this source code is governed by a BSD-style license// that can be found in the License file....原创 2019-06-02 18:24:05 · 497 阅读 · 0 评论 -
muduo库学习-日志模块的学习以及C++日志模块封装
前言开发一款软件,一个好的日志库肯定是必不可少的,c++作为一门这么古老的开发语言,按理说应该有一些好用的日志库,但是在网上找到的那些日志库感觉用起来都不是很得心应手,因此就自己动手写了一个日志库,源码放在github上我自己写的这个日志是参考muduo的日志模块开发的,下面我们首先介绍muduo日志库muduo日志库的架构:muduo日志库的类调用关系Logger => Impl...原创 2019-07-08 21:55:16 · 980 阅读 · 0 评论 -
c++ 螺旋打印
c++ 螺旋打印面试题面试题输入一个整数n,从中心而外螺旋打印输入 2输出9 2 38 1 47 6 5思路分析:如上图所示,先确定每一圈的范围,如n=3时,最外圈的范围是(0,0)~(4,4),即是x,y的取值在0-4之间,第二圈的范围是从(1,1)~ (3,3),代码要做到事就是确定范围之后,从左上角开始,逆时针填数。 void Spin(int n) ...原创 2019-09-10 17:40:41 · 884 阅读 · 0 评论 -
Qt中Qtableview的使用1(QSqlTableModel模型)
#include "mainwindow.h"#include "ui_mainwindow.h"#include<QMessageBox>#include<QSqlQuery>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setup原创 2016-09-14 18:25:56 · 2945 阅读 · 0 评论 -
sprintf()函数标准化输出实用实例
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#include <iostream>using namespace std;void test1(char* str){ memset(str,0,100); sprintf(str,"%06s","1234");原创 2017-04-18 19:39:09 · 1831 阅读 · 0 评论 -
libghttp安装及使用封装案例(httpClient)
libghttp库下载地址:http://lfs.linuxsir.org/htdocs/blfscvs/gnome/libghttp.html 官方API参考文档:https://sourcecodebrowser.com/libghttp/1.0.9/ghttp_8h.html 将源码包下载下来,进入例行安装流程: 先解压:tar -xzvf libghttp-1.0.9.tar.gzc原创 2017-07-15 14:21:09 · 2989 阅读 · 2 评论 -
jsoncpp 的学习和简单的使用案例
一、JsonCpp简介JsonCpp主要包含三种类型的class:Value Reader Writer。 jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。 注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。二、json的特性 JSON 数据的书写格式是:名称/值对。 名称原创 2017-07-03 11:19:48 · 2303 阅读 · 0 评论 -
C/C++毫秒时间戳函数
下面是产生毫秒时间戳的代码和测试案例#include <stdio.h>#include <sys/timeb.h>#include <sys/types.h>long long getSystemTime(){ struct timeb t; ftime(&t); return 1000*t.time + t.millitm;}int main(){ long原创 2017-07-11 10:18:10 · 7295 阅读 · 0 评论 -
C++中类构造函数初始化列表和函数内赋值区别
C++类构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。C++类构造函数函数内赋值 构造函数函数内赋值是在函数体内将参数的值逐个赋值给类的成员变量。例class CExample {public: int a; float b; //构造函数初始化列表 CExample(): a(原创 2017-02-05 22:14:38 · 535 阅读 · 0 评论 -
动态库的生成和使用
动态库的生成 1)打开vs 新建项目,起的名字不能有中文2) 选择DLL和空项目3)写代码写代码就是我们之前写的xxx.c和xxx.h,只是不需要main()函数测试罢了。 你可以重新新建项目,重新写。 或者用之前写好的代码,生成库: 步骤如下: A)拷贝所需代码到工程所在目录B) 添加所需代码:C)修改代码 生成 DLL 时,通常创建一个包含正在导出的函数原型和/或类的头文件,并将 _原创 2016-09-22 22:22:28 · 482 阅读 · 0 评论 -
Qt中Qtableview 的使用2(QStandardItemModel模型)
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); m_mode原创 2016-09-14 18:23:37 · 6742 阅读 · 0 评论 -
QT中Qtableview的使用方法
一、添加表头:QStandardItemModel *model = new QStandardItemModel();model->setColumnCount(2);model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit(“卡号”));model->setHeaderData(1,Qt::Horizontal,QString::转载 2016-08-29 15:22:45 · 6087 阅读 · 0 评论 -
【JSON简介】
jsoncpp 主要包含三种类型的 class:Value、Reader、Writer。jsoncpp 中所有对象、类名都在 namespace Json 中,包含 json.h 即可。【VALUE】 Json::Value 是jsoncpp 中最基本、最重要的类,用于表示各种类型的对象,jsoncpp 支持的对象类型可见 Json::ValueType 枚举值。 可如下是用 Json::转载 2016-08-22 23:11:42 · 293 阅读 · 0 评论 -
C/C++中malloc,delete和free,malloc的区别
malloc和free是C语言库函数,new和delete是C++操作符 new和delete在实例化对象时可以触发对象的构造函数和析构函数,malloc和free则不会 malloc和free在C/C++中都可以使用,new和delete只能在C++中使用 malloc的返回值类型是void* ,new的返回值为具体的数据类型 欢迎关注问我团队公众号...原创 2016-08-09 10:26:25 · 447 阅读 · 0 评论 -
C++中函数重载,重写,隐藏的区别
函数重载:函数重载的条件: 函数在同一个作用域内。同一个类内的同名函数,或者同一个块区域内的同名函数。 函数名相同 函数的参数列表不同 注意点: const参数和非const参数不算参数列表不同(会产生二义性) 但是&和非&是属于重载。 类成员函数和普通函数一样 代码事例:#include <iostream>...原创 2016-08-09 10:35:29 · 330 阅读 · 0 评论 -
static的作用和理解
作用域是理解static变量和函数的关键,被static修饰的变量和函数他只能被它所在作用域访问(如果获得变量指针也可以操作),不能被它作用域之外被访问,全局静态变量和函数,不能被其他文件使用,本质还是因为 它的作用域只在本文件全局静态变量全局静态变量属性 全局静态变量位于静态存储区,在整个程序运行期间都一直存在,所以只初始化一次 全局静态变量位于内存中bss区,系统会默认为其初始化为...原创 2016-08-09 10:45:50 · 408 阅读 · 0 评论 -
C++分割字符串函数封装
#include <string>#include <vector>#include <iostream>#include <string.h>using namespace std;void split(const string& src, const string& separator, vector<string>& dest){ string str = src;原创 2017-11-15 11:20:25 · 329 阅读 · 0 评论 -
c/c++常用开源库汇总
偶然发现的一个博客地址,记录下来用到的时候去查找: http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419原创 2018-01-13 15:37:35 · 1256 阅读 · 0 评论 -
FreeNOS学习-lib-std-MemoryBlock学习
MemoryBlock这个类是用来对freenos内存管理的头文件:#ifndef __MEMORYBLOCK_H#define __MEMORYBLOCK_H#include "Types.h"class MemoryBlock{ public: /** * Fill memory with a constant byte. * @param d...原创 2018-09-20 23:36:10 · 466 阅读 · 0 评论 -
可重入和非可重入函数
要解释可重入函数是何物必须先分清楚单线程程序和多线程程序,典型的UNIX程序都是一个线程贯穿程序始终,cpu围绕单条执行逻辑来处理,对于多线程程序则是,同一进程却存在多条独立并发的执行逻辑。信号处理器函数因为使用了信号处理器函数可能会在任一时间点异步中断程序的执行逻辑,从而在同一进程中存在两条(即主程序和信号处理函数)独立(但不是并发)的执行线程。可重入函数:如果同一程序的多个线程可以同时安...原创 2018-11-12 19:15:22 · 391 阅读 · 0 评论