Project #0 - C++ Primer
知识点
1.pragma once
C和C++中的一个非标准但广泛支持的预处理指令,用于使当前源文件在单次编译中只被包含一次。
#pragma once
class F {}; // 不管被导入多少次,只处理他一次
2.explicit
C++中的一个关键字,它用来修饰只有一个参数的类构造函数,以表明该构造函数是显式的,而非隐式的。当使用explicit修饰构造函数时,它将禁止类对象之间的隐式转换,以及禁止隐式调用拷贝构造函数。
3.noexcept
如果一个函数使用了 noexcept声明,编译器会认为这个函数不会抛出异常,从而可以对这个函数进行一些优化,例如避免额外的堆栈操作和异常处理代码等,从而提高代码效率。
如果一个函数没有使用 noexcept声明,并且在函数内部抛出了异常,这个异常会在函数的调用栈上一路传递直到被捕获,如果捕获不到,程序就会崩溃。而如果使用了 noexcept声明,那么一旦函数内部抛出了异常,程序就会直接调用 std::terminate()函数终止程序,这可以帮助程序员快速发现和调试程序中的异常问题。
使用 noexcept声明可以帮助编写高质量的代码,因为它可以明确表示函数是否会抛出异常,从而让函数的调用者更容易正确地处理异常情况。
3.unique_ptr
unique_ptr<int> p1(new int(1)); // 构造函数
unique_ptr<Ball> ball = make_unique<Ball>(); // 推荐初始化方法
unique_ptr<int> p2(p1); // 复制构造函数
unique_ptr<int> p3 = std::move(p1); // 通过move进行移动(并不是真的移动)
Ball *p = ball.get();// 获得裸指针
ball.reset(new Ball());// 重新指向另一个Ball对象
unique_ptr<int> up1 = make_unique<int>(100);
unique_ptr<int> up2(up1.release());// 方式1:转移控制权
unique_ptr<int> up3 = std::move(up1);// 方式2:转移控制权
4.unordered_map
std::unordered_map<char, std::unique_ptr<TrieNode>> children_; // 定义
children_.size(); // 拥有的容量
// 插入元素
children_.insert(std::make_pair(key_char, child));
children_.emplace(key_char, child);// 查找是否存在
if (children_.find(key_char) != children_.end()) cal(); // 存在
if (children_.count(key_char) != 0) cal(); // 存在children_.erase(key_char); // 删除
children_.swap(other_trie_node.children_); // 交换
5.C++类
类的public成员可以被任意实体访问;
类的private成员不能直接被类的实体访问,也不能被子类的实体访问,但是可以被类的成员函数访问;
类的protected成员不能直接被类的实体访问,但是可以被子类访问,也可以被类的成员函数访问;
继承基类的派生类可以访问基类的public和protected成员,可以调用基类函数.
6.cstdint头文件
头文件中包括了一组具有特定宽度要求的整型别名,以及指定他们范围的宏定义。
7.lock_guard
用于在作用域结束时自动释放互斥锁。std::lock_guard 用于管理互斥锁的加锁和解锁操作。它的主要作用是在构造函数中获取一个互斥锁,然后在析构函数中自动释放该锁,以确保在锁保护区域的结束时正确解锁。
std::lock_guard 的作用是获取互斥量的锁,并在作用域结束时自动释放锁。这样可以避免手动管理锁的复杂性和风险,同时也可以确保在使用共享资源时不会被其他线程打断。
简单来说就是使用 std::lock_guard 让开发者使用时不用关心 std::mutex 锁的释放。
8.forward和move
都为进行转移值操作。
children_[key_char] = std::forward<std::unique_ptr<TrieNode>>(child);
children_[key_char] = std::move(child);
9.condition_variable
线程控制中的条件变量,只能与std::unique_lockstd::mutex使用,唤醒线程。
std::condition_variable cond;
cond.notify_one(); // 唤醒一个线程
cond.notify_all(); // 唤醒所有线程
cond.wait(t); // 等待操作,即挂起线程操作,等待释放互斥锁
10.static_cast和dynamic_cast
强制类型转换,但是dynamic_vast号耗时更高,但是可以检测类型是否相同,如果转换后指针不为空,说明类型相同。
总结
1. 构造函数需要将unordered_map也进行初始化。
2. 函数操作进行调用已有函数来实现包装性。
3. 函数尽量简洁明了,语句更加精炼。
4. 双引用参数的函数调用要通过std::forward进行调用。
TrieNode(std::forward<TrieNode>(trienode));
5. 在进行unordered_map转移时要通过swap来转移,否则会导致插入错误,调试了好久才发现表里的元素对不上。
6. 在进行删除操作时,要注意删除字符串要从末尾依次删除,在删除过程中如果遇到了其他的尾节点,那么就不能够再删除。
相关文章:

Project #0 - C++ Primer
知识点 1.pragma once C和C中的一个非标准但广泛支持的预处理指令,用于使当前源文件在单次编译中只被包含一次。 #pragma once class F {}; // 不管被导入多少次,只处理他一次2.explicit C中的一个关键字,它用来修饰只有一个参数的类构造函…...
git提交commit信息规范,fix,feat
可以确保团体合作中,从你的提交记录可以识别出你的动作 feat:新功能(featuer)fix: 修补bugdocs: 文档(documentation)style:格式(修改样式,不影响代码运行的…...

服务器 Linux 的文件系统初探
好久没更新文章了,最近心血来潮,重新开始知识的累计,做出知识的沉淀~ 万事万物皆文件 文件系统:操作系统如何管理文件,内部定义了一些规则或者定义所以在 Linux 中所有的东西都是以文件的方式进行操作在 Linux 中&am…...

关于Unity转微信小程序的流程记录
1.准备工作 1.unity微信小程序转换工具,minigame插件,导入后工具栏出现“微信小游戏" 2.微信开发者工具稳定版 3.MP微信公众平台申请微信小游戏,获得游戏appid 4.unity转webgl开发平台,Player Setting->Other Setting…...

AI入门指南:什么是人工智能、机器学习、神经网络、深度学习?
文章目录 一、前言二、人工智能(AI)是什么?起源概念人工智能分类人工智能应用 三、机器学习是什么?概念机器学习常见算法机器学习分类机器学习与人工智能的关系 四、神经网络是什么?概念神经网络组成部分神经网络模型神经网络和机器学习的关系…...
网络安全中的IOC是指的什么?
网络安全中的IOC(Indicators of Compromise)指的是威胁指标,是网络安全领域中的一个重要概念。它指的是可以用来识别计算机系统、网络或应用程序中已经受到攻击或遭受威胁的特定特征。这些特征可以是恶意文件、恶意域名、已知攻击工具等&…...

掌握AJAX技术:从基础到实战
文章目录 **引言****1. 什么是AJAX?****2. AJAX的工作原理**AJAX 示例使用 Fetch API 实现 AJAX **3. 如何在项目中使用AJAX****4. 处理AJAX请求的常见问题****5. AJAX与JSON的结合****6. 使用AJAX框架和库****7. 实战:创建一个动态表单****8. AJAX中的事…...

Unity UGUI 实战学习笔记(6)
仅作学习,不做任何商业用途 不是源码,不是源码! 是我通过"照虎画猫"写的,可能有些小修改 不提供素材,所以应该不算是盗版资源,侵权删 因为注册和登录面板的逻辑与数据存储方面已经相对完善 服务器面板逻辑…...

iOS面试之属性关键字(二):常见面试题
Q:ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些? 对应基本数据类型默认关键字是:atomic,readwrite,assign 对于普通的 Objective-C 对象:atomic,readwrite,strong Q:atomic 修饰的属性是怎么样保存线程安全的&#x…...
java开发设计模式详解
目录 一、概述 1. 创建型模式(5种) 2. 结构型模式(7种) 3. 行为型模式(11种) 二、代码示例说明 1.单例模式(Singleton) 2.工厂方法模式(Factory Method) 3.抽象工厂模式(Abstract Factory) 4.建造者模式(Builder) 5.原型模式 (Prototype) 6.适…...

windows中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换(保姆级教程,值得收藏)
前言 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,nvm就是为…...
测试面试宝典(四十四)—— APP测试和web测试有什么区别?
一、系统架构和运行环境 APP 测试需要考虑不同的操作系统(如 iOS、Android 等)、设备型号和屏幕尺寸,以及各种网络连接状态(如 2G、3G、4G、WiFi 等)。而 Web 测试主要针对不同的浏览器(如 Chrome、Firefo…...

力扣高频SQL 50题(基础版)第三十七题
文章目录 力扣高频SQL 50题(基础版)第三十七题176.第二高的薪水题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第三十七题 176.第二高的薪水 题目说明 Employee 表: ----------------- …...

web基础之CSS
web基础之CSS 文章目录 web基础之CSS一、CSS简介二、基本用法2、CSS应用方式2.1 行内样式2.2内部样式2.3外部样式 三、选择器1、标签选择器2、类选择器3、ID选择器4、选择器的优先级 四、常见的CSS属性1、字体属性2、文本属性3、背景属性4、表格属性5、盒子模型的属性6、定位 总…...

全球轻型卡车胎市场规划预测:2030年市场规模将接近1153亿元,未来六年CAGR为2.0%
一、引言 随着全球物流行业的持续发展,轻型卡车胎作为物流运输的关键消耗品,其市场重要性日益凸显。本文旨在探索轻型卡车胎行业的发展趋势、潜在商机及其未来展望。 二、市场趋势 全球轻型卡车胎市场的增长主要受全球物流行业增加、消费者对轮胎性能要…...

8.2 数据结构王道复习 2.3.3 2.3.7选择题错题review
王道中这章主讲了线性表的定义、基本操作、顺序表示、链式表示。下方内容主分了文字部分和代码部分,便于记忆和整理。 在901中这章的要求集中在链表的基础操作中,应用题大概会出问答题。 【当前每一小节的应用题待做,先把选择题过完ÿ…...
【DL】神经网络与机器学习基础知识介绍(二)【附程序】
原文:https://mengwoods.github.io/post/dl/009-dl-fundamental-2/ 文章目录 激活函数卷积神经网络超参数其他程序 激活函数 激活函数的目的是在模型中引入非线性,使网络能够学习和表示数据中的复杂模式。列出常见的激活函数。 线性函数: y…...
6万字嵌入式最全八股文面试题大全及参考答案(持续更新)
目录 冒泡排序算法的平均时间复杂度和最坏时间复杂度分别是多少?在什么情况下使用冒泡排序较为合适? 选择排序算法是稳定的排序算法吗?为什么? 插入排序在近乎有序的数组中表现如何?为什么? 快速排序的基本思想是什么?它在最坏情况下的时间复杂度是多少? 归并排序…...
iceberg 用户文档(持续更新)
iceberg 用户文档 表 Schema 变更查看表的元数据信息表参数变更 表 Schema 变更 Iceberg 支持使用 Alter table … alter column 语法对 Schema 进行变更,示例如下 -- spark sql -- 更改字段类型 ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE doubl…...

基于YOLOv8的船舶检测系统
基于YOLOv8的船舶检测系统 (价格85) 包含 【散货船,集装箱船,渔船,杂货船,矿砂船,客船】 6个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...