C++
我不是宸哥
要为真理而斗争
展开
-
双指针法(快慢指针
来自代码随想录暴力解法就是两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。双指针法双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。定义快慢指针快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组慢指针:指向更新 新数组下标的位置很多同学这道题目做的很懵,就是不理解 快慢指针究竟都是什么含义,所以一定要明确含义,后面的思路就更容易理解了。力扣相关题目移除元素删除有序数组中的重复项比较含退格的字符串(逆序遍历)有序数原创 2022-06-13 22:19:16 · 424 阅读 · 0 评论 -
二分法搜索法
二分搜索法区间2.左闭右开while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]力扣经典二分法......原创 2022-06-13 15:21:09 · 207 阅读 · 0 评论 -
每日一题944. 删列造序
好久没刷题了,先来一道简单题造一下给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。这些字符串可以每个一行,排成一个网格。例如,strs = [“abc”, “bce”, “cae”] 可以排列为:abcbcecae你需要找出并删除 不是按字典序升序排列的 列。在上面的例子(下标从 0 开始)中,列 0(‘a’, ‘b’, ‘c’)和列 2(‘c’, ‘e’, ‘e’)都是按升序排列的,而列 1(‘b’, ‘c’, ‘a’)不是,所以要删除列 1 。返回你需要删除的列数原创 2022-05-12 16:36:41 · 131 阅读 · 0 评论 -
CMake 简述
cmake_minimum_required(VERSION 2.8)project(main)#配置编译选项 -p可调式set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)#配置头文件搜索路径#include_directories()#配置库文件搜索路径#ink_directories()#设置需要编译的源文件列表set(SRC_LIST main.cpp)add_executable(server ${SRC_LIST})#目标程序需要链接的库文件原创 2022-04-15 11:37:19 · 312 阅读 · 0 评论 -
muduo网络库,初学
环境,centos7虚拟机,visual studio2019远程开发muduo网络库提供了两个主要的类TcpServer:用于编写服务器TcpClient:用于编写客户端epoll + 线程池模型,把网络I/O代码和业务代码分开(用户的连接和断开,用户的可读写时间是我们需要关心的。)TcpServer构造函数TcpServer(EventLoop* loop, //事件循环 const InetAddress& listenAddr, //封装好的类,绑定IP地原创 2022-04-14 17:01:28 · 463 阅读 · 0 评论 -
json 序列化json for modern c++
使用的是json三方库json for modern c++先使用json定义一个对象,可以想象成STL容器,中间储存的一个个的键值对#include <cstdio>#include<iostream>#include"json/json.h"#include"json.hpp"#include<vector>#include<map>using json = nlohmann::json;using namespace std;void原创 2022-04-14 13:16:52 · 1337 阅读 · 0 评论 -
C++数据库连接线程池
前面已经写了一个与mysql数据库相连接的类,连接数据库现在写一个线程池来增加连接的效率。这是我自己的学习记录,所以很多函数记录得很详细首先是.h文件中连接池的声明#pragma once#include<string>#include<queue>#include<mutex>#include<atomic>#include<thread>#include<condition_variable>#include&原创 2022-04-13 14:28:37 · 453 阅读 · 0 评论 -
C++ 访问数据库
环境:根据mysql的安装位数,选择visual studio的平台,现在一般都是X64的。工程->属性->C/C++常规->附加包含目录中粘贴上mysql包的路径工程->属性->链接器->常规->附加库目录中也粘贴上mysql链接库的路径工程->属性->链接器->输入->附加依赖项末尾添上libmysql.lib,记得用;隔开最后将libmysql.dll文件粘贴到工程目录文件夹下...原创 2022-04-13 11:17:19 · 4290 阅读 · 0 评论 -
C++ future的其他成员
future.status枚举类型,enum class future_status { // names for timed wait function returns ready, timeout, deferred};using namespace std;int mythread() { cout << "thread id = " << this_thread::get_id() << endl; chr原创 2022-04-12 10:40:49 · 414 阅读 · 0 评论 -
C++ std::async std::future
std::async std::future创建后台任务std::async函数模板,用来启动一个异步任务返回一个std::future对象,future是个类模板异步任务,自动创建一个线程并执行线程入口函数,返回的future对象里就含有入口函数返回的结果头文件include<future>#include<thread>#include <iostream>#include<future>using namespace std;原创 2022-04-11 21:59:29 · 639 阅读 · 0 评论 -
C++多线程通信
条件变量condition_variablewait()是condition_variable的成员函数void wait (unique_lock& lck)会无条件的阻塞当前线程然后等待通知,前提是此时对象lck已经成功获取了锁。等待时会调用lck.unlock()释放锁,使其它线程可以获取锁。一旦得到通知(由其他线程显式地通知),函数就会释放阻塞并调用lck.lock(),使lck保持与调用函数时相同的状态。然后函数返回,注意,最后一次lck.lock()的调用可能会在返回前再次阻塞线原创 2022-04-11 21:18:01 · 3078 阅读 · 1 评论 -
单例设计模式
在整个项目中,某个特殊的类,只能创建一个对象,多的创建不了。私有化构造函数,不能直接生成类对象了class Single {private: static Single* single;private: Single(){} //私有化构造函数public: static Single* GetInstance() { if (single == NULL) { single = new Single(); } return single; }};Single原创 2022-04-11 16:23:07 · 572 阅读 · 0 评论 -
C++多线程安全
1.互斥量(mutex)用代码把共享数据锁住,其他尝试操作共享数据的线程必须等待 锁定->操作->解锁头文件#include<mutex>lock() unlock()是mutex的成员函数,成对使用,有lock必然要有unlockusing namespace std;class A {public: //收到数据,塞进容器中 void inMsgRecList() { for (int i = 0;i < 100000;i++) { ..原创 2022-04-08 17:00:28 · 2199 阅读 · 0 评论 -
C++多线程
1.包含头文件#include<thread>2.调用thread类创建一个对象void print() { cout << "子线程运行。。。。" << endl;}int main() { thread test1(print); cout << "主线程。。。。" << endl; return 0;}线程不做处理会调用abort函数终止线程3.join函数,加入汇合线程,阻塞主线程,等...原创 2022-04-07 18:36:54 · 917 阅读 · 0 评论 -
C++函数指针
函数指针:指向函数首地址的指针变量定义函数指针: 用(*标识符)替换函数名,剩下照抄如 int sum(int a,int b) ---> int (*pr)(int a,int b) //形参可以不写 int (pr*)(int,int)通过函数指针调用函数给函数指针赋值,通常使用的是函数名pr = sum;1.直接替换函数名调用 pr(1,2);2.取*运算调用 (*pr)(1,2);函数指针的作用:充当回调函数(以函数指针为参数的函数)int max(int原创 2022-04-07 14:16:41 · 1917 阅读 · 0 评论 -
C++ char* 和string
string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。char *的内存管理由用户自己处理,很容易出现内存不足的问题。当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最好不过了。当你知道了存储的内存的时候,可以用char *,但是不如用string的好,用指针总会有隐患。用string还可以使用各种成员函数来处理串的每一个字符,方便处理。用char *处理串,就不如string的方便了,没有相应的函数来直接调用,而是要自己编写函数来完成串原创 2022-04-06 19:55:39 · 1185 阅读 · 0 评论 -
C++连接mysqlAPI
1. mysql_real_connect()1) 函数原型MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)2) 参数及说明• 第一个参数应该是一个现存MYSQL结构的地址。在调用.原创 2022-04-06 19:54:20 · 374 阅读 · 0 评论 -
手写数据库连接池
背景功能节省掉客户端连接mysql时TCP的三次握手四次挥手以及账号密码验证的时间初始链接量最大连接量最大空闲时间连接超时时间基本功能原创 2022-04-06 17:21:44 · 758 阅读 · 0 评论