C++
倔强的石头。
csdn账号是很久以前注册,当时为了方便就乱填了用户名。现在想改也改不掉了。。。
展开
-
提高编程能力 算法练习1
/*给定长度小于100的一个字符串,区分大小写的情况下统计其中字母的个数,并按照由大到小的顺序输出.当字母个数一样时,按照把先出现的字母放在前面.当字符串中没有字母时,则不要输出.*/#include <iostream>#include <string>#include <vector>#include <map>#include <unordered_map>#include <algorithm>bool.原创 2020-05-29 23:47:07 · 232 阅读 · 0 评论 -
c++ 简单socket编程
1.使用多线程对每个连接进行处理2.使用成员函数指针对消息的内容进行处理server.cpp#include<iostream>#include<thread>#include<stdio.h>#include<sys/socket.h>#include<sys/types.h>#include<netinet/in.h>#include<arpa/inet.h>#include <unistd原创 2020-05-19 07:59:14 · 559 阅读 · 0 评论 -
设计模式一:工厂模式
#include<iostream>#include<vector>#include<memory>using namespace std;typedef enum TypeProduct{ enumProductA, enumProductB, enumProductC}PRODUCTTYPE;class Product{publ...原创 2020-05-11 22:51:31 · 167 阅读 · 0 评论 -
c++线程池 简洁安全的线程池
#pragma once#include <mutex>#include <condition_variable>#include <functional>#include <queue>#include <thread>class fixed_thread_pool {public: explicit fixed_th...原创 2020-05-09 07:58:46 · 233 阅读 · 0 评论 -
c+11 多线程async、future、packaged_task、promise
1 std::async std::future创建后台任务并返回值目的:希望线程返回一个结果std::async是个函数模板,用来启动一个异步任务,启动起来一个异步任务。什么叫“启动一个异步任务”,就是自动创建一个线程并开始执行对应的线程入口函数,它返回一个std::future对象,这个std::future对象里面就含有线程函数返回的结果,我们可以通过调用std::future对象的成员...原创 2019-12-02 23:05:09 · 123 阅读 · 0 评论 -
c++ 多线程 条件变量condition_variable(生产者消费者示例)
#include <iostream>#include <string>#include <thread>#include <list>#include <mutex>#include <condition_variable>class MesProcess{public: void Inmsglis...原创 2019-12-01 20:39:20 · 439 阅读 · 0 评论 -
c++ 多线程unique_lock详解
1 unique_lock取代lock_guardunique_lock是个类模板,工作中,一般lock_guard(推荐使用);lock_guard取代了mutex的lock()和unlock();unique_lock比lock_guard灵活很多,效率上差一点,内存占用多一点。2 unique_lock的第二个参数lock_guard可以带第二个参数std::lock_guard&...原创 2019-11-28 23:37:06 · 348 阅读 · 0 评论 -
c++拷贝构造函数详解
1 什么使拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=100; int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include<iostream>using namespace std;class CExample{private: int a;pu...转载 2019-11-28 23:15:52 · 655 阅读 · 0 评论 -
c++ 多线程编程 共享数据的保护即互斥量的用法
1.互斥量(mutex)的基本概念保护共享数据,操作时,某个线程用代码把共享数据锁住、然后操作数据、最后解锁;其它想操作共享数据的线程必须等待解锁;互斥量是个类对象,理解成一把锁,多个线程尝试用lock()成员函数来加锁,只有一个线程能锁成功(成功的标志是lock()函数返回);如果没锁成功,那么这个流程卡在lock(),不断的尝试去锁这把锁头;互斥量使用要小心,保护数据不多也不能少,少了,...原创 2019-11-27 23:02:36 · 223 阅读 · 0 评论 -
c++ 多线程编程 创建线程后的两种方式join和detach以及创建线程的方式
1. 线程的两种状态一般来说程序开始的入口就是main函数,此时main函数就是主线程,所以自己创建的线程也是从一个函数开始的(初始函数),一旦这个函数运行结束,就表示这个线程结束了。整个进程是否执行完毕的标志是主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了!那么现在就存在了一个一个问题,自己创建的线程是想在进程结束之前运行结束,还是想在进程结束之后继续运行。这就是join和...原创 2019-11-26 23:45:24 · 555 阅读 · 0 评论 -
使用rapidjson实现未知json数据,拿到每一个key和value
如果已知json的key便很容易能够从json得字符串中解出value值,但是在未知key的情况下,便只能遍历json字符串,找到所需要的值使用rapidjson遍历字符串代码如下:#include<iostream>#include"rapidjson/document.h"#include"rapidjson/writer.h"#include"rapidjson/st...原创 2019-11-26 22:56:32 · 3226 阅读 · 0 评论 -
使用boost进行base64编码所踩的坑
Base64编码原理时把3字节的二进制数据编码为4字节的文本数据,长度增加33%,如果要编码的二进制数据不是3的倍数,会在最后剩下的1个或2个字节用\x00字节在末尾补足,然后在编码的末尾加上1或者2个=号。所以在进行Base64进行解码时,得出得解码后得string得size有时候会比原始得string 多一个或者两个长度,使用以下代码便可以避免出现这个问题。#include <bo...原创 2019-11-26 00:09:07 · 1376 阅读 · 0 评论 -
c++多线程编程 进程、线程的概念
1. 并发、线程、进程的概念1.1并发两个或者多个任务同时发生:一个程序同时执行多个独立的任务;单核cpu的计算机在某一时刻只能指行一个任务,由操作系统调度,进行多次的任务切换,产生并发的假象,这种切换是要有时间的开销的,比如操作系统要保存切换时的各种状态、执行进度等信息,切换回来时要复原这些信息。随着硬件的发展,现在出现了多核处理器,在一块芯片上有多个核,能够实现真正的并发执行多个任务。...原创 2019-11-25 23:56:27 · 240 阅读 · 0 评论 -
用辗转相除法求两个数的最大公约数
#define _CRT_SECURE_NO_DEPRECATE#include<stdio.h>int main(){ /* a b t 12 18 12 18 12 6 12 6 0 6 0 */ int a, b, t; scanf("%d%d", &a, &b); while (b !=...原创 2018-09-25 20:16:26 · 3498 阅读 · 0 评论 -
C++ 中STL基本容器中的vector
vector属于顺序容器,使用时需要包含#includevector 中常用的操作:#include&lt;iostream&gt;#include&lt;vector&gt;using namespace std;//1.定义和初始化vector&lt;int&gt; vec1; //默认初始化,vec1为空vector&lt;int&gt; vec2原创 2018-07-20 16:52:56 · 145 阅读 · 0 评论