栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++-swap

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++-swap

交换操作

swap操作交换两个相同类型容器的内容。

vector vec1(10);
vector vec2(24);
swap(vec1,vec2);

调用swap后,vec2有10个string元素,vec1有24个string元素。除array类型外,交换两个容器内容的操作保证会很快,因为swap只是交换了两个容器的内部数据结构,元素本身并未交换,swap可以保证在常数时间内完成。
元素不会被移动意味着,除string外,指向容器的迭代器、引用和指针在swap操作后都不会失效,它们仍指向swap之前所指向的元素,但是这些元素所属的容器已经不同。

容器提供了swap函数,但统一使用非成员函数版本的swap是一个好习惯。即如下写法:

using std::swap;
swap(x,y);

如果存在类型特定的swap版本,那么会调用该版本的swap,否则会调用std::swap。

拷贝并交换(copy and swap)

定义swap的类通常用swap来定义它们的赋值运算符

HasPttr &HasPtr::operator=(HasPtr rhs)
{
    swap(*this,rhs);
    return *this;
}

右侧运算对象通过值传递的方式给了赋值运算符,即拷贝了右侧运算对象一个副本,swap交换rhs和*this中的数据成员,赋值运算符结束后,rhs被销毁,析构函数被执行,此时析构函数释放的是原本this指向的对象所分配的内存。
这种方式的简洁之处在于它自动处理了自赋值情况且天然就是异常安全的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号