C++标准库(std)详解

C++标准库(std)详解——目录

  • C++标准库(`std`)详解
    • 一、命名空间(`namespace`)
    • 二、主要组件
      • 1. 输入输出流(`<iostream>`)
      • 2. 字符串处理(`<string>`)
      • 3. STL容器(`<vector>`,` <list>`,` <map>`, `<set>`等)
      • 4. 算法(`<algorithm>`)
      • 5. 数值处理(`<numeric>`)
      • 6. 函数对象与可调用对象(`<functional>`)
      • 7. 异常处理(`<exception>`)
      • 8. 时间日期(`<chrono>`)
      • 9. 文件系统(`<filesystem>`)
      • 10. 线程支持(`<thread>`,` <mutex>`,` <condition_variable>`等)
      • 11. 正则表达式(`<regex>`)

C++标准库(std)详解

C++是一种功能强大的编程语言,其标准库(std)提供了丰富的功能和工具,帮助开发者高效地进行编程。本文将详细介绍C++标准库的主要组成部分及其使用方法。

一、命名空间(namespace

在C++中,标准库的所有内容都定义在std命名空间中。这是为了避免与用户自定义的函数或类名发生冲突。使用std命名空间有两种主要方式:

  • 显式指定:每次使用标准库中的函数或类时,都加上std::前缀,例如std::coutstd::vector
  • 使用声明:通过using关键字引入特定的名称,例如using std::cout;,这样在当前作用域内就可以直接使用cout而无需加std::前缀。

二、主要组件

1. 输入输出流(<iostream>

<iostream>头文件提供了用于控制台输入输出的功能,主要包括:

  • std::cin:标准输入流,通常用于从键盘读取输入。
  • std::cout:标准输出流,用于向控制台输出信息。
  • std::cerr:标准错误流,用于输出错误信息,通常不带缓冲。
  • std::clog:标准日志流,用于输出日志信息,通常带缓冲。

示例代码:

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;int a;std::cin >> a;std::cout << "You entered: " << a << std::endl;return 0;
}

2. 字符串处理(<string>

<string>头文件提供了std::string类,用于处理字符串。常用操作包括:

  • std::string:表示字符串对象。
  • std::getline:从输入流中读取一行字符串。
  • str.size():返回字符串的长度。
  • str.substr(pos, len):获取子字符串。
  • str1 + str2:字符串拼接。

示例代码:

#include <iostream>
#include <string>int main() {std::string str1 = "Hello";std::string str2 = "World";std::string result = str1 + ", " + str2 + "!";std::cout << result << std::endl;return 0;
}

3. STL容器(<vector>, <list>, <map>, <set>等)

C++标准库提供了多种容器类,用于存储和管理数据。常见的容器包括:

  • std::vector:动态数组,支持随机访问。
  • std::list:双向链表,支持快速插入和删除。
  • std::map:关联容器,存储键值对,按键排序。
  • std::set:集合容器,存储唯一元素,自动排序。

示例代码(使用std::vector):

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

4. 算法(<algorithm>

<algorithm>头文件提供了许多通用算法,可以应用于各种容器。常用算法包括:

  • std::sort:对容器中的元素进行排序。
  • std::find:查找容器中的某个元素。
  • std::count:统计容器中满足条件的元素个数。
  • std::copy:将一个容器的元素复制到另一个容器。

示例代码:

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {5, 3, 1, 4, 2};std::sort(numbers.begin(), numbers.end());for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

5. 数值处理(<numeric>

<numeric>头文件提供了一些数学运算相关的函数,例如:

  • std::accumulate:计算容器中元素的累加和。
  • std::inner_product:计算两个容器的内积。

示例代码:

#include <iostream>
#include <vector>
#include <numeric>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};int sum = std::accumulate(numbers.begin(), numbers.end(), 0);std::cout << "Sum: " << sum << std::endl;return 0;
}

6. 函数对象与可调用对象(<functional>

<functional>头文件提供了函数对象和可调用对象的包装器,例如:

  • std::function:通用的可调用对象包装器,可以存储任何可调用对象(如函数、Lambda表达式、函数对象)。
  • std::bind:绑定函数参数,生成新的可调用对象。

示例代码:

#include <iostream>
#include <functional>void printSquare(int x) {std::cout << x * x << std::endl;
}int main() {std::function<void(int)> func = printSquare;func(5); // 输出 25return 0;
}

7. 异常处理(<exception>

<exception>头文件提供了标准异常类,用于处理程序中的异常情况。常见的异常类包括:

  • std::exception:基类,提供what()方法返回异常描述。
  • std::runtime_error:运行时错误异常。
  • std::logic_error:逻辑错误异常。

示例代码:

#include <iostream>
#include <exception>int main() {try {throw std::runtime_error("An error occurred");} catch (const std::exception& e) {std::cout << "Caught exception: " << e.what() << std::endl;}return 0;
}

8. 时间日期(<chrono>

<chrono>头文件提供了处理时间和日期的功能,例如:

  • std::chrono::system_clock:系统时钟,用于获取当前时间。
  • std::chrono::duration:表示时间段。
  • std::chrono::time_point:表示时间点。

示例代码:

#include <iostream>
#include <chrono>
#include <thread>int main() {auto now = std::chrono::system_clock::now();std::cout << "Current time: " << std::chrono::system_clock::to_time_t(now) << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));return 0;
}

9. 文件系统(<filesystem>

<filesystem>头文件提供了操作文件系统的功能,例如:

  • std::filesystem::path:表示文件路径。
  • std::filesystem::exists:检查文件是否存在。
  • std::filesystem::create_directory:创建目录。
  • std::filesystem::remove:删除文件或目录。

示例代码:

#include <iostream>
#include <filesystem>namespace fs = std::filesystem;int main() {fs::path p = "example.txt";if (fs::exists(p)) {std::cout << p << " exists" << std::endl;} else {std::cout << p << " does not exist" << std::endl;}return 0;
}

10. 线程支持(<thread>, <mutex>, <condition_variable>等)

C++11引入了多线程支持,相关头文件包括:

  • std::thread:表示线程对象。
  • std::mutex:互斥锁,用于保护共享数据。
  • std::condition_variable:条件变量,用于线程间同步。

示例代码:

#include <iostream>
#include <thread>
#include <mutex>std::mutex mtx;void printMessage(const std::string& message) {std::lock_guard<std::mutex> lock(mtx);std::cout << message << std::endl;
}int main() {std::thread t1(printMessage, "Hello from thread 1");std::thread t2(printMessage, "Hello from thread 2");t1.join();t2.join();return 0;
}

11. 正则表达式(<regex>

<regex>头文件提供了正则表达式相关的类和函数,用于字符串的模式匹配和搜索。常用功能包括:

  • std::regex:表示正则表达式对象。
  • std::regex_match:检查整个字符串是否匹配正则表达式。
  • std::regex_search:搜索字符串中与正则表达式匹配的部分。
  • std::regex_replace:替换字符串中与正则表达式匹配的部分。

示例代码:

#include <iostream>
#include <regex>
#include <string>int main() {std::string text = "Hello, World!";std::regex pattern("\\bWorld\\b"); // 匹配单词 "World"if (std::regex_search(text, pattern)) {std::cout << "Match found!" << std::endl;} else {std::cout << "No match found." << std::endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914940.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP32的OTA升级详解:3. 搭建node/python服务器升级(native ota原生API)

一、OTA两种方式&#xff1a;app_update 与 esp_https_ota 区别 ESP32/ESP32-S2/ESP32-C3等可通过Wi-Fi或以太网下载新固件到OTA分区实现运行时升级。ESP-IDF提供两种OTA升级方法&#xff1a; 使用app_update组件的原生API使用esp_https_ota组件的简化API(支持HTTPS升级) 本次…

byte[]作为接口参数传递的方法

在C#中通过WebService或API传递byte参数&#xff08;如文件、图像等二进制数据&#xff09;时&#xff0c;通常有以下几种实现方式&#xff1a; ‌1. 使用Base64编码&#xff08;推荐REST API&#xff09;‌ 将byte数组转换为Base64字符串传输&#xff0c;适用于JSON格式的API&…

元宇宙与Web3的深度融合:构建沉浸式数字体验的愿景与挑战

一、技术特征与融合基础1. 元宇宙的技术架构&#xff08;2025年&#xff09;空间构建技术&#xff1a;3D建模与渲染&#xff1a;实时渲染引擎&#xff08;如Unity HDRP&#xff09;支持路径追踪光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D场景。…

什么是脑裂

脑裂定义&#xff1a; 脑裂是分布式系统中由于网络分区&#xff08;Network Partition&#xff09;导致集群节点被分割成多个独立子集&#xff0c;每个子集认为自己是唯一合法的集群&#xff0c;从而导致数据不一致或系统行为异常的现象。详细工作原理&#xff1a;发生原因&…

川翔云电脑:云端算力新标杆,创作自由无边界

一、旗舰机型&#xff1a;4090Ultra 48G 显存颠覆硬件限制 川翔云电脑最新上线的RTX 4090Ultra 48G 显存机型&#xff0c;采用 NVIDIA Ada Lovelace 架构&#xff0c;单卡显存容量达 48GB GDDR6X&#xff0c;较传统 4090 翻倍&#xff0c;可直接加载 1200 万面数的超复杂模型&a…

贪心算法(排序)

码蹄集OJ-活动安排 #include<bits/stdc.h> using namespace std; struct MOOE {int s,e; }; bool compare(const MOOE&a,const MOOE&b) {return a.e<b.e; } int main( ) {int n;cin>>n;vector<MOOE>a(n);for(int i0;i<n;i){cin>>a[i].…

详解序数回归损失函数ordinal_regression_loss:原理与实现

在医疗 AI 领域&#xff0c;很多分类任务具有有序类别的特性&#xff0c;如疾病严重程度&#xff08;轻度→中度→重度&#xff09;、肿瘤分级&#xff08;G1→G2→G3&#xff09;等。这类任务被称为序数回归&#xff08;Ordinal Regression&#xff09;&#xff0c;需要特殊的…

SQL增查

建完库与建完表后后:1.分别查询student表和score表的所有记录student表&#xff1a;score表:2.查询student表的第2条到5条记录SELECT * FROM student LIMIT 1,4;3.从student表中查询计算机系和英语系的学生的信息SELECT * FROM student-> WHERE department IN (计算机系, 英…

二分答案之最大化最小值

参考资料来源灵神在力扣所发的题单&#xff0c;仅供分享学习笔记和记录&#xff0c;无商业用途。 核心思路&#xff1a;本质上是求最大 应用场景&#xff1a;在满足条件的最小值区间内使最大化 检查函数&#xff1a;保证数据都要大于等于答案 补充&#xff1a;为什么需要满…

OCR 赋能档案数字化:让沉睡的档案 “活” 起来

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;企业产品档案包含设计图纸、检测报告、生产记录等&#xff0c;传统数字化仅靠扫描存档&#xff0c;后续检索需人工逐份翻阅&#xff0c;效率极低。​OCR 产品档案解决方案直击痛点&#xff1a;通过智能识别技…

力扣118.杨辉三角

思路1.新建一个vector的vector2.先把空间开出来&#xff0c;然后再把里面的值给一个个修改开空间的手段&#xff1a;new、构造函数、reserve、resize因为我们之后要修改里面的数据&#xff0c;这就意味着我们需要去读取这个数据并修改&#xff0c;如果用reserve的话&#xff0c…

Python 网络爬虫 —— 提交信息到网页

一、模块核心逻辑“提交信息到网页” 是网络交互关键环节&#xff0c;借助 requests 库的 post() 函数&#xff0c;能模拟浏览器向网页发数据&#xff08;如表单、文件 &#xff09;&#xff0c;实现信息上传&#xff0c;让我们能与网页背后的服务器 “沟通”&#xff0c;像改密…

SpringMVC4

一、SpringMVC 注解与项目开发流程1.1注解的生命周期- Target、Retention 等元注解&#xff1a;- Target(ElementType.TYPE) &#xff1a;说明这个注解只能用在类、接口上。- Retention(RetentionPolicy.RUNTIME) &#xff1a;说明注解在运行时保留&#xff0c;能通过反射获取…

数据结构排序算法总结(C语言实现)

以下是常见排序算法的总结及C语言实现&#xff0c;包含时间复杂度、空间复杂度和稳定性分析&#xff1a;1. 冒泡排序 (Bubble Sort)思想&#xff1a;重复比较相邻元素&#xff0c;将较大元素向后移动。 时间复杂度&#xff1a;O(n)&#xff08;最好O(n)&#xff0c;最坏O(n)) 空…

嵌入式学习-PyTorch(2)-day19

很久没有学了&#xff0c;期间打点滴打了一个多星期&#xff0c;太累了&#xff0c;再加上学了一下Python语法基础&#xff0c;再终于开始重新学习pytorchtensorboard 的使用import torch from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs…

Prompt Engineering 快速入门+实战案例

资料来源&#xff1a;火山引擎-开发者社区 引言 什么是 prompt A prompt is an input to a Generative AI model, that is used to guide its output. Prompt engineering is the process of writing effective instructions for a model, such that it consistently generat…

「源力觉醒 创作者计划」_文心开源模型(ERNIE-4.5-VL-28B-A3B-PT)使用心得

文章目录背景操作流程开源模型选择算力服务器平台开通部署一个算力服务器登录GPU算力服务器进行模型的部署FastDeploy 快速部署服务安装paddlepaddle-gpu1. 降级冲突的库版本安装fastdeploy直接部署模型&#xff08;此处大约花费15分钟时间&#xff09;放行服务端口供公网访问最…

P10719 [GESP202406 五级] 黑白格

题目传送门 前言&#xff1a;不是这样例有点过分了哈&#xff1a; 这是我没考虑到无解的情况的得分&#xff1a; 这是我考虑了的得分&#xff1a; 总而言之&#xff0c;就是一个Subtask 你没考虑无解的情况&#xff08;除了Subtask #0&#xff09;,就会WA一大片,然后这个Subt…

AWS RDS PostgreSQL可观测性最佳实践

AWS RDS PostgreSQL 介绍AWS RDS PostgreSQL 是亚马逊云服务&#xff08;AWS&#xff09;提供的托管型 PostgreSQL 数据库服务。托管服务&#xff1a;AWS 管理数据库的底层基础设施&#xff0c;包括硬件、操作系统、数据库引擎等&#xff0c;用户无需自行维护。高性能&#xff…

C++——set,map的模拟实现

文章目录前言红黑树的改变set的模拟实现基本框架迭代器插入源码map模拟实现基础框架迭代器插入赋值重载源码测试代码前言 set&#xff0c;map底层使用红黑树这种平衡二叉搜索树来组织元素 &#xff0c;这使得set, map能够提供对数时间复杂度的查找、插入和删除操作。 下面都是基…