C++常用标准库介绍

C++标准库常用算法 ​。 阅读详情

std::cout

std::cout是C++标准库中预定义的一个全局对象(注意不是类,是对象!),属于std::ostream类(输出流类)。使用cout可以将数据输出到控制台。

基本用法

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;  // 输出字符串并换行
    return 0;
}

输出不同类型的数据

std::cout可以自动识别基本数据类型(如int,double,char,string等)。

    std::cout << "整数: " << num << std::endl;      // 输出:整数: 42
    std::cout << "浮点数: " << pi << std::endl;    // 输出:浮点数: 3.14159
    std::cout << "字符: " << ch << std::endl;       // 输出:字符: A
    std::cout << "字符串: " << str << std::endl;    // 输出:字符串: C++
    std::cout << "布尔值: " << flag << std:

控制输出格式

通过头文件中的函数,可以控制输出格式(如精度、字符宽度、进制等)。

常用格式控制符
  • 设置宽度:std::setw(n)
    指定下一个输出项的最小宽度。std::setw只对下一个输出有效,之后恢复默认。
  • 设置精度:std::setprecision(n)
    控制浮点数的小数位数。
  • 填充字符:std::setfill©
    用字符 c 填充空白。
  • 进制转换:std::hex、std::dec、std::oct
    分别以十六进制、十进制、八进制输出整数。
#include <iostream>
#include <iomanip>

int main() {
    int num = 255;
    double pi = 3.1415926535;
    // 设置宽度和填充字符
    std::cout << std::setw(10) << std::setfill('*') << num << std::endl;  // 输出:*******255
    std::cout << std::setw(10) << num << std::setfill('*') << std::endl;  // 输出:255*******
    // 设置浮点数精度
    std::cout << std::fixed << std::setprecision(2) << pi << std::endl;// 输出:3.14
    // 十六进制输出
    std::cout << std::hex << num << std::endl;  // 输出:ff
    // 布尔值显示为 true/false
    std::cout << std::boolalpha << true << std::endl;  // 输出:true
    return 0;
}

换行与刷新

  • 换行符:std::endl
    插入换行符并刷新输出缓冲区。
  • 刷新缓冲区:std::flush
    强制刷新缓冲区,但不换行。
  • 仅换行:\n
    插入换行符,不强制刷新缓冲区。

刷新输出缓冲区是指强制将缓冲区中暂存的数据立即写入目标设备(如控制台、文件等),而不是等待缓冲区自然刷新(例如缓冲区填满、程序正常退出或遇到换行符)。这一机制确保了输出的即时性,尤其在需要实时查看结果时非常关键。那为什么要有缓冲区呢:

  • 提高效率:频繁的系统调用(如写入控制台)代价较高,缓冲区将多次小数据操作合并为一次大的写入操作。
  • 减少开销:批量处理数据能显著降低I/O操作的次数。

何时会自动刷新缓冲区?

  1. 缓冲区已满。
  2. 程序正常结束(main函数返回或调用exit())。
  3. 遇到换行符(如使用 std::endl)。
  4. 输入操作(如使用 std::cin)可能触发关联输出流的刷新(交互式设备特性)。

std::bind

std::bind 是 C++ 标准库中的一个函数模板,用于创建一个绑定对象(std::function 对象),该对象可以将函数或成员函数与特定的参数绑定在一起。这使得你可以创建一个可调用对象,该对象在调用时会自动传递绑定的参数。

简单地说,C++引入std::bind可以简化调用某个对象的成员函数;自动传入固定参数给函数,简化了接口调用;可以封装更简单的回调函数接口。

基本用法

std::bind(F, A1, A2, ..., An, _1, _2, ..., _N);
  • F:要绑定的函数或成员函数。
  • A1, A2, …, An:直接传递给函数的参数。
  • _1, _2, …, _N:占位符,表示将要传递的参数位置。
  • 返回类型:std::function 对象

绑定普通函数示例代码

#include <iostream>
#include <functional>

// 定义一个普通函数
void myFunction(int a, int b, int c) {
    std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl;
}

int main() {
    // 使用 std::bind 绑定普通函数
    std::function<void(int)> boundFunction = std::bind(myFunction, 10, std::placeholders::_1, 20);

    // 调用绑定的函数
    boundFunction(30);  // 输出: a: 10, b: 30, c: 20

    return 0;
}

绑定成员函数示例代码

绑定类成员函数时,bind的第二个参数传入对象指针或对象引用。

#include <iostream>
#include <functional>

class MyClass {
public:
    void myFunction(int a, int b, int c) {
        std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl;
    }
};

int main() {
    MyClass obj;

    // 使用 std::bind 绑定成员函数
    std::function<void(int,int)> boundFunction = std::bind(&MyClass::myFunction, &obj, 10, std::placeholders::_1, std::placeholders::_2);

    // 调用绑定的函数
    boundFunction(20,30);  // 输出: a: 10, b: 20, c: 30

    return 0;
}

std::mutex

std::mutex 是 C++ 标准库中用于线程同步的互斥量(Mutual Exclusion)工具,用于保护共享资源,防止多个线程同时访问导致数据竞争。

声明和初始化

#include <mutex>
std::mutex mtx; //声明一个互斥量

核心方法

  • lock()
    尝试获取锁。如果锁已被其他线程占用,当前线程会阻塞直到锁可用。

  • unlock()
    释放锁。必须在 lock() 成功获取锁后调用,否则行为未定义。

  • try_lock()
    尝试获取锁,不阻塞。若锁不可用,立即返回 false。

示例代码

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;
int shared_value = 0;

void increment() {
    for (int i = 0; i < 1000; ++i) {
        mtx.lock();            // 加锁
        ++shared_value;        // 临界区(Critical Section)
        mtx.unlock();          // 解锁
    	}
}
int main() {
    std::thread t1(increment);
    std::thread t2(increment);
    t1.join();
    t2.join();
    std::cout << "Final value: " << shared_value << std::endl;
    return 0;
}

注意:mutex需要手动调用unlock()接口释放锁,如果忘记释放会导致死锁。因此std::mutex经常使用RAII的std::lock_guard 或 std::unique_lock来管理锁。

std::lock_guard

std::lock_guard 是 C++ 标准库中用于管理互斥锁(std::mutex)的 RAII(Resource Acquisition Is Initialization)工具。它的核心作用是在构造时自动加锁,在析构时自动解锁,从而确保锁的正确释放,避免死锁或资源泄漏。它适用于简单且线程安全的代码场景,是推荐使用的锁管理方式。

声明和初始化

#include <mutex>
std::mutex mtx; //声明一个互斥量

std::function

C++ 标准库 C++标准库是一套在C++标准中定义的库,它包含了C++语言运行时所需的函数、类和模板。标准库的主要目的是提供一种跨平台的编程环境,使得程序员可以方便地使用这些库来编写各种应用程序。头文件:包含了标准库中各个组件的定义和声明,例如<iostream><vector>等。标准输入输出流:包括std::coutstd::cinstd::cerr等,用于输入输出操作。容器:包括std::liststd::map等,用于存储和管理数据。算法:提供了一系列算法,如排序、查找、复制等,可以应用于容器中的数据。 阅读详情

相关推荐

C/C++标准库函数详解与应用

C标准库是C语言编程的基础,它为开发者提供了丰富的函数和宏,使得编程更加高效和简洁。本章将介绍C标准库的基本组成和一些常用函数的实际应用,帮助读者深入理解并正确使用这些标准库函数。C++标准库是在C标准库的基础上发展起来的,它保留了C语言的许多功能,同时增加了很多新的功能来支持面向对象编程和泛型编程。C语言的标准库强调的是函数的集合,主要用于进行输入输出操作、内存分配、数学计算等底层操作。而C++标准库除了包含C语言的标准库以外,还增加了一系列的类模板库,如标准模板库(STL)。

weixin_42163404的博客 852

Algorithm-CPP 项目教程

Algorithm-CPP 项目教程 1. 项目介绍 Algorithm-CPP 是一个开源的 C++ 算法库,旨在提供一系列常用的算法实现,帮助开发者快速实现各种算法需求。该项目由 shouxieai 发起并维护,代码托管在 GitHub 上。Algorithm-CPP 不仅提供了基础的算法实现,还包含了一些高级算法的优化版本,适用于各种复杂的应用场景。 2. 项目快速启动 2.1 环境准备 在...

gitblog_00273的博客 861

R语言的下载、安装及环境配置(Rstudio&VSCode)

R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。提供的图形界面,可以在其中访问控制台、创建脚本或安装其他软件包。

zegeai的博客 2万+

深入篇【C++】string类的常用接口介绍:标准库中的string类 【万字总结】

深入篇【C++】string类的常用接口介绍:标准库中的string类 【万字总结】💯💯💯 总结string类中常用接口以及如何应用,剖析底层原理,更深入理解C++中的string'

Extreme_wei的博客 2066

Accelstepper 库中的参数计算公式

要完全调试电机的各个参数,例如最大速度,加速度等,就需要了解其计算公式和原理。 以下是代码注释: /// This code uses speed calculations as described in /// "Generate stepper-motor speed profiles in real time" by David Austin/// http://fab.cba.mi...

wenguitao的博客 4455

YOLOv10注意力革新:小波域注意力(WDA)如何实现多尺度特征精准聚焦

本文深入解析YOLOv10中的小波域注意力(WDA)机制,探讨其如何通过频域分解与动态聚焦实现多尺度特征精准提取。WDA模块结合离散小波变换与注意力机制,显著提升小目标检测性能,在VisDrone数据集上AP提升达12.6%。文章详细介绍了两种集成方案及代码实现,为计算机视觉开发者提供实用指南。

weixin_29079671的博客 253

C++中有哪些常用的标准库?

以上仅是一些常见的标准库,C++标准库还提供了许多其他功能丰富的库,如日期和时间处理、正则表达式、文件操作等,开发人员可以根据需要选择适合的库来提高开发效率。C++中有许多常用的标准库,这些库提供了丰富的功能和工具,方便开发人员进行各种任务。

2301_78263023的博客 833

python调用海康工业相机并用opencv显示(整体实现)

python语言调用海康机器人(hikrobotics)工业相机 第一章 Python 语言下连接海康工业相机,并获取数据 文章目录 系列文章目录 前言 目录 python语言调用海康机器人(hikrobotics)工业相机 文章目录 前言 一、底层接口的准备 二、使用步骤 1.引入库 2.枚举设备 3.判断设备类型 4.输入连接设备 5.创建相机实例并创建句柄 6.打开设备 7.获取相关参数 8.主动获取图像 9.开启取流并获取每张.

qq_39570716的博客 5万+

【C++标准库函数总结】常用标准库函数汇总

本文对 C++ 标准库中常用的函数和类进行了详细的汇总和介绍,涵盖了输入输出、字符串处理、数学计算、容器、算法、日期和时间处理以及多线程编程等方面。这些标准库函数和类为 C++ 开发者提供了强大的工具,能够大大提高开发效率和代码质量。然而,C++ 标准库非常庞大且功能丰富,本文只是介绍了其中的一部分。在实际开发中,可以根据具体需求深入学习和运用标准库的其他功能。

byte轻骑兵的技术小窝 2249

深入解析EDID中Display Descriptor Block的配置技巧与实战应用

本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。

1a2s3d4f5g的博客 878

Quantum Espresso Hands-On实战训练(四)——PDOS计算与轨道分析

本文详细介绍了Quantum Espresso中PDOS计算与轨道分析的实战方法,重点解析了PDOS在材料电子结构研究中的核心价值,包括原子级分辨率、轨道级解析和自旋极化分析。通过具体案例和操作步骤,帮助读者掌握从输入文件准备到结果解读的全流程,并提供了高级分析技巧和疑难问题解决方案。

weixin_29211309的博客 504

常用的C++标准库

`lower_bound(beg, end, x)` | 首个≥x的元素位置 | `auto pos = lower_bound(v.begin(), v.end(), 42);| `reverse(beg, end)` | 反转序列 | `reverse(s.begin(), s.end());| `<climits>` | 类型极值 (`INT_MAX`, `LLONG_MIN`) || `<cstring>` | C风格字符串 (`strlen`, `strcmp`) |

tiger4066的博客 412

自抗扰控制(ADRC)理论与工程实践:8.1 自适应ADRC与参数在线整定

自适应自抗扰控制(AADRC)针对传统固定参数ADRC在动态变化系统中的局限性,提出通过在线调整关键参数(如观测器带宽ω₀、控制器带宽ω_c)以适应对象动态变化。主要方法包括基于稳定性理论的自适应律设计和基于性能指标的优化调节,前者保证闭环稳定但设计复杂,后者通过梯度搜索或模糊规则实现性能优化但缺乏严格稳定性证明。当前挑战在于非线性时变系统的稳定性分析、参数变化速率限制及工程实现的计算负担。AADRC拓展了ADRC在变参数系统(如无人机、软体机器人)中的应用,是迈向自主智能控制的关键技术。

技术工作者 215

C/C++标准库概述

C/C++标准库是一组预定义函数、宏和文件的集合,这些函数和文件提供了一些基本的功能和操作。

qq_39281631的博客 1952

2024年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

他尝试编写了如下程序,请你完善划线处的代码,计算出在h点s分放学时,三个时针分别经过3点位置的次数,用一个元组表示各指针经过3点位置的次数 (时针次数,分针次数,秒针次数) ,并输出。所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。匿名函数,冒号之前表示的是这个函数的参数,冒号之后表示返回值,可以使用默认值,使用时需要将它赋值给一个变量,设置默认值不是必须,如无传入实参则使用默认值,如有传入实参则使用实参。

人生就是一个不断学习的过程 371

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++标准库:常用函数

当你需要根据不同的标准来比较元素时,可以提供一个自定义的比较函数。

倔强老吕的博客 979

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++ 导入标准库

指令实现,需指定对应的头文件名称。标准库头文件分为两类:带。后缀的传统C头文件和不带后缀的现代C++头文件。在C++中导入标准库通过。

2509_93988702的博客 963

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++标准库介绍

标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。 1、Dinkumware C++ Library参考站点:http://www.dinkumware.com/P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr.

痞子龙3D编程 1240

【C++标准库】string的介绍及使用

介绍及使用string类

2203_76003626的博客 1929

C++ 标准库类型 string

在刷题的时候,经常会用到string,但是用法有的时候记不住,老去翻书百度太麻烦了,就想办法总结到一起,方便以后查阅。 标准库类型string 标准库类型 string 表示可变长的字符序列,使用 string 类型必须首先包含 string 头文件。作为标准库的一部分,string 定义在命名空间 std 中。 1. 定义和初始化 string 对象 指令 ............

wanttifa的博客 752

【C++】字符串处理标准库函数大全

在C++中,字符串处理主要通过标准库中的std::string类以及C风格的字符串函数(如strcpy,strlen等,但这些通常不推荐在C++中使用,除非有特殊需求)来进行。下面主要汇总了std::string类提供的一些常用字符串处理成员函数,以及部分C++标准库中与字符串处理相关的函数。

byte轻骑兵的技术小窝 1499

【c++】string类---标准库(STL)中的string类

【c++】string类---标准库(STL)中的string类及实现

m0_74722801的博客 1769

042-C++ 导入标准库

C++ 标准库(Standard Library)不仅提供了大量的工具和功能,还遵循了现代 C++ 的设计理念,包括泛型编程、资源管理(RAII)、并发模型等。在了解了 C++ 标准库的基础知识和常见工具后,让我们进一步探索如何在复杂场景中使用标准库的高级功能。C++ 标准库是 C++ 编程语言的一部分,为开发者提供了广泛的工具,涵盖容器、算法、输入输出、线程管理、数学计算等。使用标准库时,需要包含相应的头文件。是 C++17 引入的工具,用于存储多个类型中的一个,类似于联合体(union),但类型安全。

小宝哥Code的专栏 1444

C/C++中的内建函数介绍:介绍C/C++中内建函数的基本概念、用途和作用

C/C++ 内建函数

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2975

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 246
上一篇: C++函数模板用法
下一篇: AUTOSAR CanSM介绍及DaVinci配置
BandiAUTO
博客等级 码龄12年 125粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值