[Redis#12] 常用类型接口学习 | string | list
目录
0.准备
1.string
get | set
set_with_timeout_test.cpp
set_nx_xx_test.cpp
mset_test.cpp
mget_test.cpp
getrange_setrange_test.cpp
incr_decr_test.cpp
2.list
lpush_lrange_test.cpp
rpush_test.cpp
lpop_rpop_test.cpp
blpop_test.cpp
llen_test.cpp
0.准备
我们可以先定义了三个模板函数,用于打印不同类型的容器内容。每个函数都接受一个容器作为参数,并根据容器内元素的类型以不同的方式打印它们。
1.printContainer
函数:
template<typename T>
inline void printContainer(const T& container) {for (const auto& elem : container) {std::cout << elem << std::endl;}
}
- 该函数适用于任何包含可以直接输出到
std::cout
的元素的容器(如int
,double
,std::string
等)。 - 它遍历容器中的每个元素,并使用
std::cout
打印每个元素。
2.printContainerPair
函数:
template<typename T>
inline void printContainerPair(const T& container) {for (auto& elem : container) {// 此处预期 elem 是一个 std::pairstd::cout << elem.first << ": " << elem.second << std::endl;}
}
- 这个函数专为存储
std::pair
类型元素的容器设计,比如std::map
或std::unordered_map
中的键值对。 - 对于每个元素,它假设
elem
是一个std::pair
,并打印出pair
的first
和second
成员。
3.printContainerOptional
函数:
template<typename T>
inline void printContainerOptional(const T& container) {for (const auto& elem : container) {// 此处预期 elem 是一个 optional 类型的元素, 打印之前, 先判定一下, 看是否有效if (elem) {std::cout << elem.value() << std::endl;} else {std::cout << "元素无效" << std::endl;}}
}
- 此函数针对包含
std::optional
类型元素的容器。 - 在打印之前,它会检查每个
optional
元素是否有效(即是否包含值)。如果有效,则调用value()
方法获取其值并打印;如果无效,则打印“元素无效”。
示例
#include <vector>
#include <map>
#include <optional>
#include <iostream>// 假设上面的函数已经定义好了int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};std::map<std::string, int> nameAge = {{"Alice", 30}, {"Bob", 25}};std::vector<std::optional<int>> optionals = {10, {}, 20, {}};printContainer(numbers);printContainerPair(nameAge);printContainerOptional(optionals);return 0;
}
运行:
1.string
redis.get()
返回的是一个optional
类型
optional
类型在C++14中,正式纳入标准库- 因为
redis.get()
会返回nil
无效值,用std::string
不方便表现nil
,而std::string*
虽然可以用nullptr
表示无效,但是返回指针又设计内存管理问题 - 所以综上,此处使用
optional
表示"非法值"/“无效值”
get | set
// test1.cpp
#include <iostream>
#include <sw/redis++/redis++.h>
#include "util.hpp"using namespace std;
using sw::redis::Redis;void test1(Redis& redis) {cout << "get 和 set" << endl;redis.flushall();redis.set("key", "111");//类命令auto value = redis.get("key");//接收命令 返回值if (value) {cout << "value: " << value.value() << endl;}redis.set("key", "222");value = redis.get("key");if (value) {cout << "value: " << value.value() << endl;}
}
运行:
⭕注意:
1.redis.flushall(); 在 test 开始
- 作用:清空数据库,避免之前残留的数据干扰
2.get return 的 value 取值采取:value.value()
set_with_timeout_test.cpp
这个文件包含了 test2
函数,用于测试带有超时时间的 set
命令。
// set_with_timeout_test.cpp
#include <iostream>
#include <chrono>
#include <thread>
#include <sw/redis++/redis++.h>using namespace std;
using namespace std::chrono_literals;
using sw::redis::Redis;void test2(Redis& redis) {cout << "set 带有超时时间" << endl;redis.flushall();redis.set("key", "111", 10s);this_thread::sleep_for(3s);long long time = redis.ttl("key");cout << "time: " << time << endl;
}
set_nx_xx_test.cpp
这个文件包含了 test3
函数,用于测试 set
命令的 NX
和 XX
选项。
// set_nx_xx_test.cpp
#include <iostream>
#include <sw/redis++/redis++.h>using namespace std;
using sw::redis::Redis;
using sw::redis::UpdateType;void test3(Redis& redis) {cout << "set NX 和 XX" << endl;redis.flushall();redis.set("key", "111");// set 的重载版本中, 没有单独提供 NX 和 XX 的版本, 必须搭配过期时间的版本来使用. redis.set("key", "222", 0s, UpdateType::EXIST);auto value = redis.get("key");if (value) {cout << "value: " << value.value() << endl;} else {cout << "key 不存在!" << endl;}
}
mset_test.cpp
这个文件包含了 test4
函数,用于测试 mset
命令。
注意:
- 可以把多个键值对提前组织到容器 vector<pair<string, string>> 中. 以迭代器的形式告诉 mset
// mset_test.cpp
#include <iostream>
#include <vector>
#include <sw/redis++/redis++.h>using namespace std;
using sw::redis::Redis;void test4(Redis& redis) {cout << "mset" << endl;redis.flushall();// 第一种写法, 使用初始化列表描述多个键值对// redis.mset({ std::make_pair("key1", "111"), std::make_pair("key2", "222"), std::make_pair("key3", "333") });// 第二种写法, 可以把多个键值对提前组织到容器中. 以迭代器的形式告诉 msetvector<pair<string, string>> keys = {{"key1", "111"},{"key2", "222"},{"key3", "333"}};redis.mset(keys.begin(), keys.end());auto value = redis.get("key1");if (value) {cout << "value: " << value.value() << endl;}value = redis.get("key2");if (value) {cout << "value: " << value.value() << endl;}value = redis.get("key3");if (value) {cout << "value: " << value.value() << endl;}
}
mget_test.cpp
这个文件包含了 test5
函数,用于测试 mget
命令。
// mget_test.cpp
#include <iostream>
#include <vector>
#include <sw/redis++/redis++.h>
#include "util.hpp"using namespace std;
using sw::redis::Redis;
using sw::redis::OptionalString;void test5(Redis& redis) {cout << "mget" << endl;redis.flushall();vector<pair<string, string>> keys = {{"key1", "111"},{"key2", "222"},{"key3", "333"}};redis.mset(keys.begin(), keys.end());vector<OptionalString> result;auto it = back_inserter(result);redis.mget({"key1", "key2", "key3", "key4"}, it);printContainerOptional(result);
}
getrange_setrange_test.cpp
这个文件包含了 test6
函数,用于测试 getrange
(return string) 和 setrange
命令。
// getrange_setrange_test.cpp
#include <iostream>
#include <string>
#include <sw/redis++/redis++.h>using namespace std;
using sw::redis::Redis;void test6(Redis& redis) {cout << "getrange 和 setrange" << endl;redis.flushall();redis.set("key", "abcdefghijk");string result = redis.getrange("key", 2, 5);cout << "result: " << result << endl;redis.setrange("key", 2, "xyz");auto value = redis.get("key");cout << "value: " << value.value() << endl;
}
incr_decr_test.cpp
这个文件包含了 test7
函数,用于测试 incr
和 decr
命令。
// incr_decr_test.cpp
#include <iostream>
#include <sw/redis++/redis++.h>using namespace std;
using sw::redis::Redis;void test7(Redis& redis) {cout << "incr 和 decr" << endl;redis.flushall();redis.set("key", "100");//对比关注 如下两种返回结果//返回结果1:long longlong long result = redis.incr("key");cout << "result: " << result << endl;//返回结果2:对象auto value = redis.get("key");cout << "value: " << value.value() << endl;result = redis.decr("key");cout << "result: " << result << endl;value = redis.get("key");cout << "value: " << value.value() << endl;
}
运行:
2.list
lpush_lrange_test.cpp
这个文件包含了 test1
函数,用于测试 lpush
和 lrange
命令。
// lpush_lrange_test.cpp
#include <iostream>
#include <vector>
#include <string>
#include <sw/redis++/redis++.h>
#include "util.hpp"using namespace std;
using sw::redis::Redis;void test1(Redis& redis) {cout << "lpush 和 lrange" << endl;redis.flushall();// 插入单个元素redis.lpush("key", "111");// 插入一组元素, 基于初始化列表redis.lpush("key", {"222", "333", "444"});// 插入一组元素, 基于迭代器vector<string> values = {"555", "666", "777"};redis.lpush("key", values.begin(), values.end());// lrange 获取到列表中的元素vector<string> results;//容器auto it = back_inserter(results);//创建插入迭代器,用于将元素添加到容器的末尾redis.lrange("key", 0, -1, it);printContainer(results);
}
关于这个地方迭代器的使用,详细可以看前面两篇博文
- [Redis#11] cpp-redis | 通用命令 | optional | 插入迭代器
- STL 源码剖析 note(这个专栏 还在完善中 后续应该会发)
运行
rpush_test.cpp
这个文件包含了 test2
函数,用于测试 rpush
命令。
// rpush_test.cpp
#include <iostream>
#include <vector>
#include <string>
#include <sw/redis++/redis++.h>
#include "util.hpp"using namespace std;
using sw::redis::Redis;void test2(Redis& redis) {cout << "rpush" << endl;redis.flushall();// 插入单个元素redis.rpush("key", "111");// 插入多个元素, 基于初始化列表redis.rpush("key", {"222", "333", "444"});// 插入多个元素, 基于容器vector<string> values = {"555", "666", "777"};redis.rpush("key", values.begin(), values.end());// 使用 lrange 获取元素vector<string> results;auto it = back_inserter(results);redis.lrange("key", 0, -1, it);printContainer(results);
}
lpop_rpop_test.cpp
这个文件包含了 test3
函数,用于测试 lpop
和 rpop
命令。
// lpop_rpop_test.cpp
#include <iostream>
#include <optional>
#include <sw/redis++/redis++.h>using namespace std;
using sw::redis::Redis;void test3(Redis& redis) {cout << "lpop 和 rpop" << endl;redis.flushall();// 构造一个 listredis.rpush("key", {"1", "2", "3", "4"});auto result = redis.lpop("key");if (result) {cout << "lpop: " << result.value() << endl;}result = redis.rpop("key");if (result) {cout << "rpop: " << result.value() << endl;}
}
如果删除成功了,就打印 .value()
blpop_test.cpp
这个文件包含了 test4
函数,用于测试 blpop
命令。
- TIPS:对于
std::optional
类型来说,可以直接使用->
访问optional
内部包含的元素的成员
// blpop_test.cpp
#include <iostream>
#include <chrono>
#include <sw/redis++/redis++.h>using namespace std;
using namespace std::chrono_literals;
using sw::redis::Redis;void test4(Redis& redis) {using namespace std::chrono_literals;cout << "blpop" << endl;redis.flushall();auto result = redis.blpop({"key", "key2", "key3"}, 10s);if (result) {cout << "key:" << result->first << endl;cout << "elem:" << result->second << endl;} else {cout << "result 无效!" << endl;}
}
llen_test.cpp
这个文件包含了 test5
函数,用于测试 llen
命令。
return long long
// llen_test.cpp
#include <iostream>
#include <sw/redis++/redis++.h>using namespace std;
using sw::redis::Redis;void test5(Redis& redis) {cout << "llen" << endl;redis.flushall();redis.lpush("key", {"111", "222", "333", "444"});long long len = redis.llen("key");cout << "len: " << len << endl;
}
对于 接口的返回值,我们可以在 上一篇文章中提到的 文档中查找
为了加深印象 ,和有充裕的时间学习,博主就都测试了一下,下一篇文章 应该会把剩余的常见三种类型测试完,然后 接口调用体会的 汇总,之后要是 用到了,看下一篇文章的总结就好啦~
相关文章:
[Redis#12] 常用类型接口学习 | string | list
目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…...
React的ts文件中通过createElement拼接一段内容出来
比如接口返回一个值 const values [23.00, 40.00/kg];想做到如下效果, 如果单纯的用render渲染会很简单, 但是在ts文件中处理,所以采用了createElement拼接 代码如下: format: (values: string[]) > {if (!values || !val…...
【Git系列】Git 提交历史分析:深入理解`git log`命令
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
深度学习笔记——生成对抗网络GAN
本文详细介绍早期生成式AI的代表性模型:生成对抗网络GAN。 文章目录 一、基本结构生成器判别器 二、损失函数判别器生成器交替优化目标函数 三、GAN 的训练过程训练流程概述训练流程步骤1. 初始化参数和超参数2. 定义损失函数3. 训练过程的迭代判别器训练步骤生成器…...
《地球科学与环境学报》
《地球科学与环境学报》报道范围涵盖基础地质、矿产地质、水资源与环境、工程地质、地球物理、地球信息科学等领域,刊载国内外未公开发表的有创新性或意义重大的研究论文和综述文章。 来稿必须包括以下项目:题名(尽可能不要超过20字&…...
k8s 1.28 聚合层部署信息记录
–requestheader-client-ca-file –requestheader-allowed-namesfront-proxy-client –requestheader-extra-headers-prefixX-Remote-Extra- –requestheader-group-headersX-Remote-Group –requestheader-username-headersX-Remote-User –proxy-client-cert-file –proxy-cl…...
组件化设计的意义
鸿蒙操作系统(HarmonyOS)是华为公司开发的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持多种智能终端设备,还能够实现跨设备之间的协同工作。为了满足不同设备的资源能力和业务需求,鸿蒙操作系统采用了组件化的设计方…...
2025 年河北省职业院校大数据应用与 服务(中职组)赛项样题
— 1 — 2025 年河北省职业院校大数据应用与 服务(中职组)赛项样题 一、背景描述 近年来,随着旅游业的快速发展和社交媒体的普及,一 些目的地因其独特的魅力或者事件而迅速走红,吸引了大量 游客涌入,使得当…...
宏集eXware物联网网关在水务管理系统上的应用
一、前言 水务管理系统涵盖了对城市水网、供水、排水、污水处理等多个环节的监控与管理。随着物联网(IoT)技术的快速发展,物联网网关逐渐成为水务管理系统中的关键组成部分。 宏集物联网网关以其高效的数据采集、传输和管理功能,…...
【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、算法思想 细节问题 📚左右临界 📚中点选择 📚…...
yolov5 解决:export GIT_PYTHON_REFRESH=quiet
当我们在第一次运行YOLOv5中的train.py程序时:可能会出现以下报错: This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…...
MongoDB聚合操作
1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce。 单一作用聚合:提供了对常见聚合过程的简单访问,…...
Apple雷电5到底有多快?
在科技日新月异的今天,苹果公司始终走在技术创新的前沿。2023年9月12日,随着英特尔发布雷电5(Thunderbolt 5)规范,苹果迅速跟进,将其应用于自家的产品中。雷电5接口以其卓越的性能,彻底颠覆了我…...
项目快过:知识蒸馏 | 目标检测 |FGD | Focal and Global Knowledge Distillation for Detectors
公开时间:2022年3月9号 项目地址:https://github.com/yzd-v/FGD 论文地址:https://arxiv.org/pdf/2111.11837 知识蒸馏已成功地应用于图像分类。然而,目标检测要复杂得多,大多数知识蒸馏方法都失败了。本文指出&#…...
Spring Boot日志总结
文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…...
PostgreSQL最常用数据类型-重点说明自增主键处理
简介 PostgreSQL提供了非常丰富的数据类型,我们平常使用最多的基本就3类: 数字类型字符类型时间类型 这篇文章重点介绍这3中类型,因为对于高并发项目还是推荐:尽量使用简单类型,把运算和逻辑放在应用中,…...
androidstudio 最新继承 proto kts 方式
在Android Studio中,如果你使用的是Kotlin DSL(.kts文件)来配置你的Gradle项目,并且你想集成Protocol Buffers(Proto),你需要稍微调整你的配置方式。以下是如何在Kotlin DSL中配置Proto集成的步…...
【STM32学习】TB6612FNG驱动芯片的学习,驱动电路的学习
目录 1、TB6612电机驱动芯片 1.1如下是芯片的引脚图: 1.2如下图是电机的控制逻辑: 1.3MOS管运转逻辑 1.3典型应用电路 2、H桥驱动电路 2.1、单极模式 2.2、双极模式 2.3、高低端MOS管导通条件 2.4、H桥电路设计 2.5、自举电路 3、电气特性 3…...
【AI战略思考13】克服懒惰,保持专注,提升效率,不再焦虑
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 引言 我发现自己最近非常懒惰,浪费了很多时间,也容易分心,不够专注,效率低下,且每天都有点焦虑,因此制定了下面的要求和作息时间表。 目…...
基于Vue3+Element Plus 实现多表单校验
使用场景 表单校验在日常的开发需求中是一种很常见的需求,通常在提交表单发起请求前校验用户输入是否符合规则,通常只需formRef.value.validate()即可校验,但是,例如一些多步骤表单、动态表单、以及不同的用户角色可能看到不同的表…...
“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践
在全球数字化浪潮的推动下,大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布,我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…...
Day2 生信新手笔记: Linux基础
一、基础知识 1.1 服务器 super computer 或 server 1.2 组学数据分析 组学数据:如基因组学、转录组学、蛋白质组学等; 上游分析:主要涉及原始数据的获取和初步处理,计算量大,消耗的资源较多,在服务器完…...
AI开发-数据可视化库-Seaborn
1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…...
如何把Qt exe文件发送给其他人使用
如何把Qt exe文件发送给其他人使用 1、先把 Debug改成Release2、重新构建项目3、运行项目4、找到release文件夹5、新建文件夹,存放exe文件6、打开qt控制台串口7、下载各种文件8、压缩,发送压缩包给别人 1、先把 Debug改成Release 2、重新构建项目 3、运行…...
力扣103.二叉树的锯齿形层序遍历
题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1ÿ…...
MOH: MULTI-HEAD ATTENTION AS MIXTURE-OFHEAD ATTENTION
当前的问题 多头注意力使用多个头部可以提高模型的精度。然而,并不是所有的注意力头都具有同样的重要性。一些研究表明,许多注意力头可以被修剪而不影响准确性。 此外,在多头注意中,每个注意头并行操作,最终输出是所…...
Linux的文件系统
这里写目录标题 一.文件系统的基本组成索引节点目录项文件数据的存储扇区三个存储区域 二.虚拟文件系统文件系统分类进程文件表读写过程 三.文件的存储连续空间存放方式缺点 非连续空间存放方式链表方式隐式链表缺点显示链接 索引数据库缺陷索引的方式优点:多级索引…...
力扣78题详解:C语言实现子集问题
力扣78题详解:C语言实现子集问题 题目描述 给定一个不含重复元素的整数数组 nums,返回其所有可能的子集(幂集)。 说明:解集不能包含重复的子集,顺序无关。 示例 输入:nums [1,2,3] 输出&am…...
按行数据拆分到工作表-Excel易用宝
有这样一份工作表,现在要对工作表按指定行数进行拆分,如果你还在选择数据区域复制粘贴到每个工作表中,那这样的效率也太低了。 按指定行数拆分工作表,就用易用宝。 单击Excel易用宝,合并与拆分,拆分工作表…...
.net core 创建linux服务,并实现服务的自我更新
目录 创建服务创建另一个服务,用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件:yourapp.service,内容如下: [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…...
无人机的起降装置:探索起飞和降落的秘密 !
一、起降系统的运行方式 起飞方式 垂直起飞:小型无人机通常采用垂直起飞方式,利用螺旋桨产生的升力直接从地面升起。这种方式适用于空间有限或需要快速起飞的场景。 跑道起飞:大型无人机或需要较长起飞距离的无人机,可能会采用…...
Apache Airflow 快速入门教程
Apache Airflow已经成为Python生态系统中管道编排的事实上的库。与类似的解决方案相反,由于它的简单性和可扩展性,它已经获得了普及。在本文中,我将尝试概述它的主要概念,并让您清楚地了解何时以及如何使用它。 Airflow应用场景 …...
数学题转excel;数学题库;数学试卷转excel;大风车excel
一、数学试卷转excel 有些需要刷题的朋友,需要将题库数学题转为excel格式,便于管理 前端时间帮一位朋友实现了数学题转excel,包括选择题、填空题、分析题 示例: 二、问题 数学题是最难以处理的试题,理由如下 1、有…...
【C++】类和对象(下)
目录 前言 一、再探构造函数 二、类型转换 三、static 成员 四、友元 五、内部类 六、匿名对象 七、对象拷贝时的编译器优化 总结 前言 本文主要内容:构造函数的再探--初始化列表、内置类型与自定义类型之间的转换、类的static成员、友元、内部类、匿名对…...
vue多页面应用集成时权限处理问题
在多页面应用(MPA)中,权限管理通常会涉及到每个页面的访问控制、身份验证、以及权限校验。以下是几种常见的权限处理方式: 1. 前端路由权限控制 原理:虽然是多页面应用,通常每个页面会独立加载和渲染&…...
输出保留3位小数的浮点数
输出保留3位小数的浮点数 C语言代码C代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 读入一个单精度浮点数,保留3位小数输出这个浮点数。 输入 只有一行,一个单精度浮点数。 输出 也只有一…...
openssl的运用
一、概述 Opssl是一个用于TLS/SSL协议的工具包,也是一个通用密码库。 包含了国密sm2 sm3 sm4,包含了对称加密,非对称加密,单项散列,伪随机、签名,密码交换,证书等一些算法库。 为了深层次的学习…...
C++STL之vector(超详细)
CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀Ὠ…...
RabbitMQ消息可靠性保证机制5--消息幂等性处理
RabbitMQ层面有实现“去重机制”来保证“恰好一次”吗?答案是没并没有,而且现在主流的消息中间件都没有实现。 一般解决重复消息的办法是:在消费端让我们消费消息操作具有幂等性。 幂等性问题并不是消息系统独有,而是࿰…...
24/12/1 算法笔记<强化学习> 创建Maze交互
我们今天制作一个栅格的游戏。 我们直接上代码教学。 1.载入库和查找相应的函数版本 import numpy as np import time import sysif sys.version_info.major 2:import Tkinter as tk else:import tkinter as tk 2.设置长宽和单元格大小 UNIT 40 MAZE_H 4 MAZE_W 4 3.初始…...
c++:模版 template
一、模版 1.格式: template <typname T> 2.实现 2.1自动推导 模板只对紧跟在后面的第一行代码有效,如果后面还想定义模板函数需要重新定义模板 #include <iostream> #include <string>template <typename T> void Print(T v…...
javascript切换类、删除类、修改类以及增加类
在JavaScript中,操作DOM元素的类(class)是一个常见的操作。以下是一些基本的方法来切换类、删除类、修改类以及增加内联样式: 切换类(Toggle Class) 切换类意味着如果类存在则移除它,如果不存…...
区块链学习笔记(2)--区块链的交易模型part1
模型基础 区块链的tx分为两种模型,分别是比特币为代表的UTXO(Unspent Transaction Output)模型,和以太坊为代表的Account模型。前者适用于货币记账,后者适用于链上应用。 UTXO模型 类似于现金的交易模型 一个tx包含…...
反射知识总结
狂神说 反射的功能: 类加载内存分析 类加载的时候,class对象就形成了。 类无论有多少对象,class对象只有一个。 获取类对象三种方式 反射,就是通过api获取一个类的类对象: 有三种方式: 方法一…...
selenium部署分布式 UI 自动化测试环境-Docker
一、根据selenium/hub官网的配置信息,进行配置。 How to run this image The Hub and Nodes will be created in the same network and they will recognize each other by their container name. A Docker network needs to be created as a first step.Create …...
算法刷题Day5: BM52 数组中只出现一次的两个数字
描述: 一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 要求:空间复杂度 O(1),时间复杂度O(n)。 题目传送门 is here 思路: 方法一:最简单的思路就…...
使用docker-compose部署搜索引擎ElasticSearch6.8.10
背景 Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于实时数据搜索、日志分析、全文检索等应用场景。 Elasticsearch 支持高效的全文搜索,并提供了强大的聚合功能,可以处理大规模的数据集并进行快速…...
多线程篇-5--线程分类(线程类型,springboot中常见线程类型,异步任务线程)
常见的线程类型包括用户线程(User Threads)、守护线程(Daemon Threads)、主线程(Main Thread)、工作线程(Worker Threads)和线程池中的线程。 一、用户线程(User Thread…...
详解高斯消元
详解高斯消元 好东西,可以求所有一次方程组的解。 \color {red} 好东西,可以求所有一次方程组的解。 好东西,可以求所有一次方程组的解。 前置知识 一般消元法的公理: 两方程互换,解不变; 一方程乘以非零数 k k k,解不变; 一方程乘以数 k k k加上另一方程,解不变。 …...
【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息
目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉,出现新的请求结果,参数start更新,每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...