std::swap

C/C++编程笔记:C++中的 swap 内置函数,用法详解 函数std :: swap()是C ++标准模板库(STL)中的内置函数,该函数交换两个变量的值。 句法: swap(a,b) 参数:该函数接受两个必须交换的必需参数a和b。参数可以是任何数据类型。 返回值:该函数不返回任何内容,它交换两个变量的值。 下面的程序说明了swap()函数: 示例一: #include <bits/stdc++.h> using namespace std; int main() { int a = 10; int b = 2 阅读详情
 

std::swap             function template     <algorithm>

template <class T> void swap ( T& a, T& b );
Exchange values of two objects(交换两个对象的值)

Assigns the content of a to b and the content of b to a.
(将a的内容给b,将b的内容给a。)

The behavior of this function template is equivalent to:
(该函数模板的实现如下:)
 template <class T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}
 


Notice how this function involves a copy construction and two assignment operations, which may not be the most efficient way of swapping the contents of classes that store large quantities of data, since each of these operations generally operate in linear time on their size.
(注意,该函数是通过调用一个拷贝构造函数和两个赋值操作来交换两个对象的内容,这并不是最高效的交换方法对大数据来说,因为每个操作时间都是跟对象大小的成正比的线性时间关系。)

Because this function template is used as a primitive operation by many other algorithms, it is highly recommended that large data types overload their own specialization of this function. Notably, all STL containers define such specializations (at least for the standard allocator), in such a way that instead of swapping their entire data content, only the values of a few internal pointers are swapped, making this operation to operate in real constant time with them.


Parameters
a, b
Two objects, whose contents are swapped.
The type must be copy constructible and support assignment operations. (类型T必须包含拷贝构造和支持赋值操作。)


Return value
none


Example
// swap algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {

  int x=10, y=20;                         // x:10 y:20
  swap(x,y);                              // x:20 y:10

  vector<int> first (4,x), second (6,y);  // first:4x20 second:6x10
  swap(first,second);                     // first:6x10 second:4x20

  cout << "first contains:";
  for (vector<int>::iterator it=first.begin(); it!=first.end(); ++it)
    cout << " " << *it;

  cout << endl;

  return 0;
}
 

Output:

first contains: 10 10 10 10 10 10

 
Complexity
Constant: Performs exactly one copy construction and two assignments (although notice that each of these operations works on its own complexity).

C++STL std::swap 有如下两个类 当前需要交换两个Widget对象 class WidgetImpl{ public: private: int a,b,c; std::vector<double>v; }; class Widge{ public: Widget(const Widget& rhs); Widget& operator=(const Widget& rhs) {... 阅读详情

相关推荐

CPP {容器的swap(浅拷贝), std::swap(浅拷贝)}

1

qq_66485519的博客 832

c++ std::swap() 函数

c++ std::swap() 函数 最近刚开始学习c++容器,发现容器中提供的swap()函数并不是交换了两个容器的内容,而是交换了两个容器的地址。比如如下代码: #include <vector> #include <iostream> using namespace std; template<class Os, class Co> Os& operator<<(Os& os, const Co& co) { os &l

qq_30694087的博客 2万+

C++中std::swap知识详解及示例和高级应用

}&&())) &&} }&&()))通用模板:通过三次移动构造/移动赋值来交换两者内容,依赖类型T的移动语义。noexcept保证:当T的移动构造和移动赋值都不会抛异常时,swap本身也为noexcept,这对容器和算法的异常安全至关重要。:在调用时通常写作swap(a, b);,便可同时考虑自定义的交换重载。当你的类管理资源(指针、文件句柄等)或内部状态复杂时,应自己重载swap并让其noexceptpublic:// 自定义 swap。

qq_36812406的博客 2373

swap函数的用法

对于复杂类型,特别是那些包含资源管理的类,建议在类的实现中提供一个swap成员函数或非成员友元函数来定制交换逻辑,以确保资源正确处理且交换操作高效执行。// ... 成员变量和方法public:// 实现具体的交换逻辑。

u014114223的博客 4574

C++中std::swap使用详解

std::swap是 C++ 标准库中定义的一个函数模板,用于交换两个对象的值。std::swap#include <utility> // 或 #include <algorithm>功能:交换对象a和b的值,使a变为b的旧值,b变为a的旧值。对于自定义类,若使用std::swap查找用户定义的swap(通过 ADL 查找);若没有,则使用通用模板版本。推荐做法:在类内部定义一个高效的swap()public:int* data;data = n?

qq_36812406的博客 1938

手把手教你用OpenCalib完成激光雷达与相机联合标定:从数据准备到结果可视化

本文详细介绍了使用OpenCalib工具链中的lidar2camera模块完成激光雷达与相机联合标定的全流程,包括数据准备、标定命令执行、结果验证与可视化。通过实战指南,帮助读者掌握工业级标定技术,提升自动驾驶和机器人领域的传感器融合精度。

weixin_30872499的博客 398

std::swap的实现原理

std::swapstd::swap基础逻辑:通过临时对象中转,完成两个对象的值交换;性能优化:C++11 后利用移动语义减少资源拷贝,优先转移资源所有权;特化增强:对标准容器等类型提供特化实现,直接交换内部资源句柄,实现 O(1) 效率;自定义扩展:允许用户通过成员swap+ 命名空间重载,为自定义类型提供高效交换逻辑。这一设计既保证了通用性,又兼顾了性能和异常安全性,使其成为 C++ 中资源管理和异常安全模式(如拷贝-交换)的核心工具。

u010632343的博客 842

国产AI芯动力:复旦微FMQL100TAI900 FPGA原型验证板全解析

本文全面解析了复旦微FMQL100TAI900 FPGA原型验证板在国产AI硬件领域的创新突破。该板卡采用全栈国产化设计,具备出色的AI推理性能、视频处理能力和接口生态,特别适合工业质检、智能交通等场景。文章详细介绍了其芯片架构、存储子系统、接口扩展及电源设计,并分享了实战开发经验,为开发者提供了一套可靠的国产计算平台解决方案。

weixin_29250573的博客 456

Modern C++ std::swap的实现原理

std::swap的实现原理

深山老宅的虚拟空间 565

【pprof】简要学习教程

基本介绍 pprof 是在做性能优化前的性能分析工具。 安装: go get -u github.com/google/pprof 分析工具 go tool pprof 是命令行指令,用于分析 Profiling 数据,源数据可以是 http 地址,也可以是已经 dump 下当 profile 文件;查看模式可以命令行交互模式,也可以是浏览器模式(-http 参数)。 两种应用 服务型应用 _ "net/http/pprof" 包,专用于采集 web 服务 运行数据的分析。即在运行的服务中通过 API .

码农印象 883

天地图Api4.0.怎么根据geojson的数据。把一个省的所有市区标记色块和文字

天地图

肖肖肖丽珠的博客 1513

std::swap C++11示例

C++11 中的std::swap header // moved from &lt;algorithm&gt; to &lt;utility&gt; in C++11 non-array (1) template &lt;class T&gt; void swap (T&amp; a, T&amp; b) noexcept (is_nothrow_move_constructible&l...

mutourend2010@gmail.com 1885

基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计

一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)

zhusl6688的博客 526

c++中std::swap使用方法

c++中std::swap使用方法 1.std::swap的源码: template&lt;typename _Tp&gt; inline void swap(_Tp&amp; __a, _Tp&amp; __b) #if __cplusplus &gt;= 201103L noexcept(__and_&lt;is_nothrow_move_constructible...

四叶草姚的博客 3万+

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 327

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1033

C++ std::move与std::swap

在C++11中,标准库在<utility>中提供了一个有用的函数std::move,std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义,确切地说,它使一个值易于移动。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue); std::...

WSG的博客--盛年不重来,一日难再晨.及时当勉励,岁月不待人. 6909

07 Zabbix 微信告警

Zabbix 微信告警 1.注册企业微信 企业微信注册地址:https://work.weixin.qq.com 2.进入企业微信后台管理 2.1 添加微信成员 2.2创建应用 2.3 获取四项数据 (1)AgentID (2) Secret (3) 企业ID (4)部门ID 3.Zabbix Server配置 3.1确认脚本目录 # grep alertscripts /etc/zabbix/zabbix_server....

Jian Sun_的博客 1297

c++——std::swap的实现

std::swap的源码实现如下: template<typename T> void swap(T &a,T &b) noexcept { T temp = std::move(a); a = std::move(b); b = std::move(temp); } std::swap是基于std::move语义实现的,关于std::move的介绍可以参考:c++11总结03——右值引用_www_dong的博客-优快云博客 ...

www_dong的博客 3523

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

C++ STL标准库:std::set std::multiset 交换内容swap()的使用

#include <iostream> #include <set> #include <algorithm> using namespace std; void print(const double& Ele) { cout<<Ele<<" "; } void main() { // 初始化s1,s2 set<double> s1,s2; s1.insert(11); s1.insert(21); s1.in

超级大洋葱的博客 833

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

std::swap学习笔记

std::swap函数的学习笔记

weixin_42108533的博客 1531

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

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

C++容器交换操作:从std::swap到swap成员函数的高效实践

在C++编程中,容器交换操作是优化算法性能和内存管理的关键技术。其核心原理在于区分深拷贝交换与指针交换两种模式,前者涉及数据复制,后者仅交换控制信息,实现O(1)时间复杂度。标准库提供了std::swap_ranges、容器成员函数swap和通用std::swap三种工具,分别适用于元素级精细操作和容器级高效交换。理解迭代器失效机制、异常安全性及ADL查找规则,能帮助开发者在泛型编程中实现安全高效的数据交换。通过swap技巧进行内存收缩和状态重置,是C++工程实践中提升性能的常用手段。本文聚焦STL容器交换

weixin_30889885的博客 398

std::swap和std::move

在C++11中,如果赋值运算符的右边是一个右值,那么当对象支持移动操作时我们能够自动地避免复制。如果对象有名字,那么它就是一个左值。 void swap(double &amp; x,double &amp; y) { double tmp=x; x=y; y=tmp; } void swap(vector&amp; x,vector&amp; y) { vector tmp=x; x=y; y...

shenhanghanhan的博客 1164

c语言中swap函数的参数,std :: swap()函数以及C ++ STL中的示例

std :: swap()swap()是一个标准的库函数,它可以将任意两个对象交换b / w值。在C11中,它已移至标头下。以下是swap()的语法详细信息。语法:voidswap(T&a,T&b);参数: T&a,T&b,它们是要交换的对象返回类型: void-不返回任何内容。用法:交换两个对象的黑白值例子:1)交换两种内置数据类型在下面的示例中,我们看到如何使用std...

weixin_39714565的博客 2409
上一篇: 我的“营销”开始
下一篇: strcmp, stricmp — compare strings.
Tim_包
博客等级 码龄22年 66粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值