c++字符串常用语法特性查询示例文档(二)
在 C++中,除了std::string
和std::string_view
,还有其他一些与字符串相关的类型,它们各自针对不同的场景进行了优化。以下是一些常见的字符串类型及其使用方式和适用场景的汇总。
紧接上篇 c++字符串常用语法特性查询示例文档(一)
6.std::array<char, N>
和std::vector<char>
std::array<char, N>
和std::vector<char>
是用于处理字符数组的容器类型,适合处理固定大小或动态大小的字符数据。
6.1 特点
• std::array<char, N>
:固定大小的字符数组。
• std::vector<char>
:动态大小的字符数组。
• 提供容器操作接口,如迭代器、大小操作等。
6.2 使用示例
#include <iostream>
#include <array>
#include <vector>int main() {// 使用 std::array<char, N>std::array<char, 13> arr = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};std::cout << "Array string: ";for (char c : arr) {std::cout << c;}std::cout << std::endl;// 使用 std::vector<char>std::vector<char> vec = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};std::cout << "Vector string: ";for (char c : vec) {std::cout << c;}std::cout << std::endl;return 0;
}
输出
Array string: Hello, World!
Vector string: Hello, World!
6.3 适用场景
• 处理固定大小的字符数据。
• 处理动态大小的字符数据。
7.std::basic_string
std::basic_string
是 C++标准库中std::string
的模板类,它提供了泛化的字符串功能,支持不同的字符类型。
7.1 特点
• 是一个模板类,可以使用不同的字符类型(如char
、wchar_t
、char16_t
、char32_t
)。
• 提供了动态内存管理,支持字符串的动态扩展。
• 提供了丰富的字符串操作方法,如拼接、查找、替换等。
7.2 使用示例
#include <iostream>
#include <string>int main() {// 使用 std::basic_string<char>,等同于 std::stringstd::basic_string<char> str = "Hello, ";str += "World!";std::cout << "Concatenated string: " << str << std::endl;// 使用 std::basic_string<wchar_t>,等同于 std::wstringstd::basic_string<wchar_t> wstr = L"Hello, ";wstr += L"World!";std::wcout << L"Concatenated wstring: " << wstr << std::endl;return 0;
}
输出
Concatenated string: Hello, World!
Concatenated wstring: Hello, World!
7.3 适用场景
• 需要处理不同字符类型(如多语言支持)的场景。
• 需要自定义字符类型支持的场景。
8.std::span<char>
std::span
是 C++20 引入的轻量级视图类,用于表示连续的内存区域。它可以用于字符串数据的视图,类似于std::string_view
,但更通用。
8.1 特点
• 提供对连续内存的轻量级视图。
• 不拥有内存所有权,只是对已有数据的引用。
• 支持任意类型的连续内存,包括字符数组。
8.2 使用示例
#include <iostream>
#include <span>
#include <array>int main() {std::array<char, 13> arr = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};std::span<char> span(arr);std::cout << "Span string: ";for (char c : span) {std::cout << c;}std::cout << std::endl;return 0;
}
输出
Span string: Hello, World!
8.3 适用场景
• 需要对连续内存进行高效访问的场景。
• 需要通用的内存视图,而不仅仅是字符串的场景。
9.std::optional<std::string>
std::optional
是 C++17 引入的类模板,用于表示可能为空的值。std::optional<std::string>
可以用于表示可能为空的字符串。
9.1 特点
• 提供了一种安全的方式来表示可能为空的值。
• 避免使用指针或特殊值来表示空值。
9.2 使用示例
#include <iostream>
#include <optional>
#include <string>int main() {std::optional<std::string> optStr = "Hello, World!";if (optStr) {std::cout << "Optional string: " << *optStr << std::endl;} else {std::cout << "Optional string is empty." << std::endl;}std::optional<std::string> emptyOptStr;if (emptyOptStr) {std::cout << "Optional string: " << *emptyOptStr << std::endl;} else {std::cout << "Optional string is empty." << std::endl;}return 0;
}
输出
Optional string: Hello, World!
Optional string is empty.
9.3 适用场景
• 需要表示可能为空的字符串的场景。
• 需要安全地处理空值的场景。
10.std::variant<std::string, int, double>
std::variant
是 C++17 引入的类模板,用于表示多种类型中的一个。std::variant<std::string, int, double>
可以用于表示一个变量,其值可以是字符串、整数或浮点数。
10.1 特点
• 提供了一种安全的方式来表示多种类型的值。
• 避免使用联合体(union
)或动态分配内存。
10.2 使用示例
#include <iostream>
#include <variant>
#include <string>int main() {std::variant<std::string, int, double> var = "Hello, World!";if (std::holds_alternative<std::string>(var)) {std::cout << "Variant contains string: " << std::get<std::string>(var) << std::endl;}var = 42;if (std::holds_alternative<int>(var)) {std::cout << "Variant contains int: " << std::get<int>(var) << std::endl;}var = 3.14;if (std::holds_alternative<double>(var)) {std::cout << "Variant contains double: " << std::get<double>(var) << std::endl;}return 0;
}
输出
Variant contains string: Hello, World!
Variant contains int: 42
Variant contains double: 3.14
10.3 适用场景
• 需要表示多种类型的值的场景。
• 需要安全地处理多种类型的场景。
11.std::unique_ptr<char[]>
std::unique_ptr
是 C++11 引入的智能指针,用于管理动态分配的内存。std::unique_ptr<char[]>
可以用于管理动态分配的字符数组。
11.1 特点
• 提供了自动内存管理,避免手动释放内存。
• 支持动态分配的字符数组。
11.2 使用示例
#include <iostream>
#include <memory>int main() {std::unique_ptr<char[]> ptr(new char[13]);std::strcpy(ptr.get(), "Hello, World!");std::cout << "Unique_ptr string: " << ptr.get() << std::endl;return 0;
}
输出
Unique_ptr string: Hello, World!
11.3 适用场景
• 需要动态分配字符数组的场景。
• 需要自动管理内存的场景。
总结
C++提供了多种与字符串相关的类型和工具,每种类型都有其独特的特点和适用场景。以下是一个简单的总结:
• std::array<char, N>
和std::vector<char>
:字符数组,适合处理固定大小或动态大小的字符数据。
• std::basic_string
:模板化的字符串类,支持自定义字符类型。
• std::span<char>
:轻量级内存视图,适合高效访问连续内存的场景。
• std::optional<std::string>
:表示可能为空的字符串,适合安全处理空值的场景。
• std::variant<std::string, int, double>
:表示多种类型的值,适合处理多种类型的场景。
• std::unique_ptr<char[]>
:管理动态分配的字符数组,适合需要自动管理内存的场景。
希望这篇教程能帮助你更好地理解和使用 C++中的各种字符串类型和工具。如果有任何问题,欢迎随时提问!
相关文章:
c++字符串常用语法特性查询示例文档(二)
在 C中,除了std::string和std::string_view,还有其他一些与字符串相关的类型,它们各自针对不同的场景进行了优化。以下是一些常见的字符串类型及其使用方式和适用场景的汇总。 紧接上篇 c字符串常用语法特性查询示例文档(一&#…...
10.14 Function Calling与Tool Calling终极解析:大模型工具调用的5大核心差异与实战优化
Function Calling vs Tool Calling:大模型工具调用机制深度解析 关键词:Function Calling 原理, Tool Calling 实现, @tool 装饰器, ToolMessage 机制, 工具调用优化 1. 核心概念对比分析 #mermaid-svg-uDxSPB1CoQrHDxrT {font-family:"trebuchet ms",verdana,ari…...
opencascade如何保存选中的面到本地
环境:occ 7.6 需求场景:用户点击了一个TopoDS_Shape,还选中了其中一个面,这时候他点了保存。用户下次打开模型文件时,我们的viewer窗口要恢复上次的选中状态。 核心问题:如何把用户选中的面保存,…...
CSS 单位详解:px、rem、em、vw/vh 的区别与使用场景
CSS 单位详解:px、rem、em、vw/vh 的区别与使用场景 在 CSS 中,各种单位有不同的特性和适用场景,理解它们的区别对实现响应式布局至关重要。 1. 绝对单位 px 特点: 像素(Pixel)是绝对长度单位1px 对应屏…...
YOLO模型predict(预测/推理)的参数设置
上一章描述了预测初体验,基本可以使用现有的yolo模型进行预测/推理。本次我们了解一下这个过程中的参数的作用。 1.参数示例 conf=0.68 :表示模型识别这个东西是车的概率为68% 。一般默认的情况下,概率小于25%的就不显示了。 1)调整一下python的代码的参数如下,可以预测图…...
MATLAB中NLP工具箱支持聚类算法
文章目录 前言一、层次聚类(Hierarchical Clustering)二、DBSCAN(基于密度的空间聚类)三、高斯混合模型(GMM)四、谱聚类(Spectral Clustering)五、模糊 C 均值(Fuzzy C-M…...
甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
2025年甘特图工具的全面指南 在项目管理领域,甘特图作为最直观的任务规划和进度追踪工具,已成为团队协作和项目执行的核心手段。随着数字化技术的快速发展,2025年的甘特图工具市场呈现出前所未有的多元化和智能化趋势。从开源软件到云端协作…...
Google设置app-ads.txt
问题: 应用上架后admob后台显示应用广告投放量受限,需要设置app-ads.txt才行。 如何解决: 官方教程: 看了下感觉不难,创建一个txt,将第二条的代码复制进行就得到app-ads.txt了。 然后就是要把这个txt放到哪才可以…...
Swift 二分查找实战:精准定位第一个“Bug版本”(LeetCode 278)
文章目录 摘要描述示例 题解答案(Swift)题解代码分析示例测试及结果输出结果: 时间复杂度分析空间复杂度分析总结 摘要 在版本迭代频繁的项目开发中,定位引入 bug 的第一个版本是一项高频任务。LeetCode 第278题“第一个错误的版…...
《AI革命重塑未来五年:医疗诊断精准度翻倍、自动驾驶事故锐减90%,全球科技版图加速变革》
1. 显著突破领域:AI 引发医疗与自动驾驶的范式变革 医疗领域的突破: AI正深刻改变医学研发和临床诊疗模式。在新药研发现代生物学中,DeepMind公司推出的 AlphaFold AI 模型在蛋白质折叠预测上取得了重大突破,被视为解决了困扰科学…...
【盈达科技】AICC™系统:重新定义生成式AI时代的内容竞争力
盈达科技AICC™系统:重新定义生成式AI时代的内容竞争力 ——全球首款AI免疫化内容中台的技术革命与商业实践 一、技术破局:AICC™系统如何重构AI内容生态 1. 技术架构:四大引擎构建闭环护城河 盈达科技AICC™(AI-Immunized Con…...
芯驰科技与安波福联合举办技术研讨会,深化智能汽车领域合作交流
5月15日,芯驰科技与全球移动出行技术解决方案供应商安波福(Aptiv)在上海联合举办以“芯智融合,共赢未来”为主题的技术研讨会。会上,双方聚焦智能座舱与智能车控的发展趋势,展开深入交流与探讨,…...
开发 前端搭建npm v11.4.0 is known not to run on Node.js v14.18.1.
错误nodejs 和npm 版本不一致 ERROR: npm v11.4.0 is known not to run on Node.js v14.18.1. This version of npm supports the following node versions: ^20.17.0 || >22.9.0. You can find the latest version at https://nodejs.org/. ERROR: D:\softTool\node-v14…...
关于systemverilog中在task中使用force语句的注意事项
先看下面的代码 module top(data);logic clk; inout data; logic temp; logic sampale_data; logic [7:0] data_rec;task send_data(input [7:0] da);begin(posedge clk);#1;force datada[7];$display(data);(posedge clk);#1;force datada[6]; $display(data); (posed…...
国产 iPaaS 与国外 iPaaS 产品相比如何?以谷云科技为例
iPaaS(Integration Platform as a Service)作为企业集成的关键技术,受到了广泛关注。国产 iPaaS 产品与国外 iPaaS 产品存在诸多差异,以下将从多个方面进行分析探讨。 一、技术架构与创新 国外 iPaaS 产品往往技术架构成熟且先进…...
低功耗:XILINX FPGA如何优化功耗?
优化Xilinx FPGA及其外围电路的功耗需要从硬件设计、软件配置和系统级优化三个层面综合考虑。以下是具体的优化策略,涵盖硬件和软件方面: 一、硬件层面的功耗优化 选择低功耗FPGA型号 选择Xilinx低功耗系列芯片,如7系列中的Artix-7ÿ…...
从纸质契约到智能契约:AI如何改写信任规则与商业效率?——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
一、传统合同的“低效困境”:耗时、昂贵、风险失控 近年来,全球商业环境加速向数字化转型,但合同管理却成为企业效率的“阿喀琉斯之踵”。据国际商会(International Chamber of Commerce)数据显示,全球企业…...
在金融发展领域,嵌入式主板有什么优点?
在金融发展领域,嵌入式主板能够有力推动金融行业的智能化与高效化进程。主板的强大计算能力可以保障业务高效运行。例如在银行的高频交易场景下,其强大计算能力可确保系统在高负荷下依然保持流畅稳定,快速响应用户需求,大大提升金…...
打卡Day30
导入官方库的三种手段 方法一:直接导入整个模块 import math print(math.sqrt(16)) # 输出: 4.0方法二:从模块中导入特定函数或类 from datetime import datetime now datetime.now() print(now) # 输出当前日期和时间方法三:使用别名简…...
AI量化交易是什么?它是如何重塑金融世界的?
第一章:证券交易的进化之路 1.1 从喊价到代码:交易方式的革命性转变 在电子交易普及之前,证券交易依赖于交易所内的公开喊价系统。交易员通过手势、喊话甚至身体语言传递买卖信息,这种模式虽然直观,但效率低下且容易…...
AIGC与数字金融:人工智能金融创新的新纪元
AIGC与数字金融:人工智能金融创新的新纪元 引言 人工智能生成内容(AIGC)在数字金融领域发挥着关键作用,从金融内容生成到智能风控,从个性化服务到投资决策,AIGC正在重塑金融的方式和效果。本文将深入探讨A…...
芯片生态链深度解析(四):芯片制造篇——纳米尺度上的精密艺术
开篇:芯片制造——现代工业的"皇冠明珠" 在芯片生态链的版图中,芯片制造是连接设计与封测的核心枢纽,堪称现代工业的“皇冠明珠”。如果说芯片设计是人类对微观世界的构想,那么制造便是将这种构想转化为现实的终极工程…...
黄金批次在流程和离散行业的概念解析
流程行业 概念 流程行业中: “黄金批次”:通常指生产过程中质量最优、性能最稳定、符合甚至超越所有关键指标的特定批次产品。这类批次在流程行业中具有标杆意义,常用于质量控制、工艺优化和客户交付。 核心特征 在流程行业中,“黄金批次”的核心特征包括: 1、质量一…...
Transformer实战——循环神经网络详解
Transformer实战——循环神经网络详解 0. 前言1. 基本循环神经网络单元1.1 循环神经网络工作原理1.2 时间反向传播1.3 梯度消失和梯度爆炸问题 2. RNN 单元变体2.1 长短期记忆2.2 门控循环单元2.3 Peephole LSTM 3. RNN 变体3.1 双向 RNN3.2 状态 RNN 4. RNN 拓扑结构小结 0. 前…...
基于Qt的app开发第九天
写在前面 笔者的课设截止时间已经越来越近了,还有不少地方的功能没有完成,所以重构一事还是放到做完整个项目、学完设计模式再考虑。目前就是继续往屎山堆屎。 需求分析 笔者的学长要做多线程,传数据的时候涉及到互斥锁之类的内容࿰…...
Baklib内容中台驱动资源管理创新
内容中台驱动智能整合 现代企业数字化进程中,内容中台通过结构化数据治理与智能算法协同,有效解决跨系统内容孤岛问题。以Baklib为例,其核心功能通过多语言支持与API接口集成能力,实现营销素材、产品文档等异构资源的统一索引与动…...
项目记录:「五秒反应挑战」小游戏的开发全过程
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 灵感来源与目标设定 最近我突然有个小想法:想做一个简洁但富有科技感的小型游戏,最好能…...
Git本地使用小Tips
要将本地仓库 d:\test 的更新推送到另一个本地仓库 e:\test,可以使用 Git 的远程仓库功能。以下是具体步骤: 在 e:\test 中添加 d:\test 作为远程仓库 在 e:\test 目录中打开 Git Bash 或命令行,执行以下命令: git remo…...
【AWS入门】AWS身份验证和访问管理(IAM)
【AWS入门】AWS身份验证和访问管理(IAM) [AWS Essentials] AWS Identity and Access Management (IAM) By JacksonML 众所周知,AWS亚马逊云科技位列全球云计算服务第一位,并且持续为广大客户提供安全、稳定的各类云产品和服务。…...
【NLP】36. 从指令微调到人类偏好:构建更有用的大语言模型
从指令微调到人类偏好:构建更有用的大语言模型 大语言模型(LLMs)已经成为现代自然语言处理系统的核心,但单纯依赖传统语言建模目标,往往难以满足实际应用的“人类意图”。从 Instruction Tuning(指令微调&…...
蓝桥杯1447 砝码称重
问题描述 你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。 输入格式 输入的第一行包含一个整数 N。 第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN…...
每日c/c++题 备战蓝桥杯(洛谷P4715 【深基16.例1】淘汰赛 题解)
洛谷P4715 【深基16.例1】淘汰赛 题解 题目大意 有 (2^n) 名选手进行淘汰赛,每场比赛两人对决,能力值高者胜出;若能力值相同,则编号较小者胜出。最终决出冠军,要求输出亚军的编号。 解题思路 关键观察:…...
基于深度学习的电力负荷预测研究
一、深度学习模型框架 在当今数字化时代,基于深度学习的电力负荷预测研究正成为保障电力系统稳定、高效运行的关键领域。其模型构建是一个复杂而精妙的过程,涉及多学科知识与前沿技术的融合应用。首先,要明确电力负荷预测的目标,…...
没有 Mac,我如何用 Appuploader 完成 iOS App 上架
没有 Mac,我如何用 Appuploader 完成 iOS App 上架|一个跨平台开发者的实战笔记 在做移动开发这些年里,唯一让我频繁想砸电脑的时刻,大概就是每次要把 iOS App 上传到 App Store。 作为一个主要在 Windows 和 Linux 开发的程序员…...
卓力达手撕垫片:精密制造的创新解决方案与多领域应用
目录 引言 一、手撕垫片的技术特性与核心功能 二、手撕垫片的多领域应用 三、南通卓力达手撕垫片的核心优势 四、未来技术展望 结语 引言 手撕垫片作为一种创新型精密金属部件,凭借其“可分层剥离、快速安装”的特性,在工业制造、电子通信、航空航天等…...
[[春秋云境] Privilege仿真场景
文章目录 靶标介绍:知识点卷影拷贝(VSS) 外网任意文件读取Jenkins管理员后台rdp远程登录Gitlab apiToken 内网搭建代理 Oracle RCESeRestorePrivilege提权mimikatzspn卷影拷贝提取SAM 参考文章 靶标介绍: 在这个靶场中,您将扮演一名资深黑客…...
【工具推荐】--Git详解
本文讲诉,git命令环境的安装和git命令的介绍 Git 是一个非常流行的分布式版本控制系统,它帮助开发者管理和跟踪项目中的代码变化。通俗地说,可以认为 Git 就像是一个代码的时间机器,它记录了项目从开始到结束的每一次代码变动。 …...
在linux里上传本地项目到github中
首先先安装git,安装完git后,输入如下操作指令: 输入自己的用户名和邮箱(为注册GITHUB账号时的用户名和邮箱): git config --global user.name "111"git config --global user.email "121…...
【基础】Windows开发设置入门8:Windows 子系统 (WSL)操作入门
前言 大家熟悉的docker、Python,但对于Windows上有一套开配合开发的相对底层的环境设置,包括powershell、winget、WSL、还有开发驱动器什么的,我准备系统学一下,不然地基不牢,也盖不起冲天高楼~ 本节,介绍…...
服务器上的Nano 编辑器进行git合并
使用git pull拉取后,出现如下部分: GNU nano 2.9.3 /data/zhouy24Files/embody/DSLab-embodied-intelligence/.git/MERGE_MSG Merge branch …...
【idea 报错:java: 非法字符: ‘\ufeff‘】
执行main方法报错:: ‘\ufeff’?package cn.com 截图如下:任何一个mian都不能执行,都报这个 写出来希望大家都能快速解决这种少见的问题,还不好弄。 我是参考这篇文章就好了:idea 报错:java: 非法字符: …...
BM25(Best Matching 25)介绍与使用
BM25(Best Matching 25)是一种基于概率检索框架的改进算法,主要用于信息检索中的相关性评分。它通过引入词频饱和函数、文档长度归一化等机制,克服了传统TF-IDF算法的局限性。 一、BM25的核心原理 1. 改进TF-IDF的三大维度 词频…...
.NET 函数:检测 SQL 注入风险
以下是一个用 C# 编写的 .NET 函数,用于检测用户输入是否存在潜在的 SQL 注入风险: using System; using System.Text.RegularExpressions;public class SqlInjectionChecker {// 常见 SQL 注入关键词和模式private static readonly string[] SqlKeywor…...
远程数据采集智能网关支持下的雨洪资源分布式监测网络搭建实践
一、项目背景 随着城市化进程的加快以及气候变化的影响,雨洪水管理成为了城市基础设施建设中的重要课题。传统的雨洪水监测手段主要依赖人工巡查和固定站点监测,存在数据获取不及时、不全面,以及在恶劣天气条件下人员安全隐患等诸多问题。为…...
LinuxYUM下载笔记
在基于RPM的Linux发行版(如CentOS、RHEL、Fedora等)中,YUM(Yellowdog Updater Modified)是默认的包管理工具,用于简化软件的安装、更新和依赖管理。以下是YUM的使用指南: 一、检查YUM是否安装 …...
研读论文《Attention Is All You Need》(7)
原文 14 3.2 Attention An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight…...
使用excel 工具做数据清洗
数据分析中有个很重要的预处理步骤,叫做「数据清洗」。 简单来说就是把数据中「脏脏的 」部分 —— 缺失的、重复的、错误的等等,给它清除掉,剩下「干净的」数据。 1、缺失数据 如果某处缺了一两个数据,最简单的方法就是 —— …...
LeetCode 217.存在重复元素
目录 题目: 题目描述: 题目链接: 思路: 思路一详解(排序): 思路二详解(Set): 思路三详解(Map): 代码: …...
Flask 与 Django 服务器部署
一、引言 在 Web 开发领域,Flask 和 Django 是 Python 生态中最受欢迎的两个 Web 框架。Flask 以其轻量级和灵活性著称,适合快速开发小型应用和 API;而 Django 则提供了全面的功能套件,包括 ORM、管理界面和认证系统,…...
Python:操作Excel按行写入
Python按行写入Excel数据,5种实用方法大揭秘! 在日常的数据处理和分析工作中,我们经常需要将数据写入到Excel文件中。Python作为一门强大的编程语言,提供了多种库和方法来实现将数据按行写入Excel文件的功能。本文将详细介绍5种常见的Python按行写入Excel数据的方法,并附上…...