我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++11的swap怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++11的swap怎么使用

这篇文章主要介绍“C++11的swap怎么使用”,在日常操作中,相信很多人在C++11的swap怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11的swap怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

假设有下面的数据类:

struct TestData{
   TestData(int _size)
       :size(_size)
   {
       data= new int[size];
   }
   ~TestData(){
       if(data != nullptr){
           delete data;
       }
   }
   TestData(const TestData& d)
   {
       size = d.size;
       if(data != nullptr){
           delete data;
       }
       data = new int[size];
       memcpy(data, d.data, size * sizeof(int));
   }
   TestData& operator=(const TestData& d)
   {
       size = d.size;
       if(data != nullptr){
           delete data;
       }
       data = new int[size];
       memcpy(data, d.data, size * sizeof(int));
       return *this;
   }
   
   int size = 0;
   int* data = nullptr;
};

这时一个简单的数据类,定义了一个拷贝构造函数和一个赋值运算符。它们都实现了深拷贝。

C++11之前的swap

先看swap的实现:

template<classT>voidswap ( T& a, T& b ){  T c(a); a=b; b=c;}

下面结合示例下面的代码看看发生了什么。

当swap调用了T C(a)的时候,实际上是调用了拷贝构造函数,当swap代码调用了赋值操作时,实际上是调用了赋值运算符。

由于拷贝构造函数和赋值运算符包含内存拷贝操作,而这样的操作共执行了三次,所以在一个swap中一共存在三次内存拷贝的操作。这种不必要的内存操作很多情况下都会影响C++的执行效率。

C++11之后的swap

引入了右值引用和数据移动的概念之后,代码变成下面的样子:

template<classT>voidswap (T& a, T& b){  T c(std::move(a)); a=std::move(b); b=std::move(c);}

由于std::move将变量类型转换为右值引用,TestData有机会提供下面针对右值引用的构造函数和赋值运算符。

TestData(TestData&& d)
   :size(d.size)
   ,data(d.data)
{
   d.size = 0;
   d.data = nullptr;
}
TestData& operator=(const TestData&& d)
{
   size = d.size;
   data = d.data;
   return *this;
}

到此,关于“C++11的swap怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++11的swap怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++11的swap怎么使用

这篇文章主要介绍“C++11的swap怎么使用”,在日常操作中,相信很多人在C++11的swap怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11的swap怎么使用”的疑惑有所帮助!接下来,请跟
2023-06-19

c++中swap怎么用

c++ 的 swap 函数用于交换两个变量或表达式的值,其语法为 void swap(t& x, t& y)。它简化了变量值交换,避免使用临时变量或赋值运算,从而提高代码简洁度和效率。需要注意的是,swap 函数只能交换相同数据类型的变量,
c++中swap怎么用
2024-05-01

C++11的sizeof怎么使用

本篇内容介绍了“C++11的sizeof怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!示例说明假设有一个程序,需要接受文字信息并生成
2023-06-19

C++11的initializer_list形参怎么使用

这篇文章主要讲解了“C++11的initializer_list形参怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的initializer_list形参怎么使用”吧!C语言
2023-06-19

C++11的array容器怎么使用

本篇内容介绍了“C++11的array容器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
2023-06-19

C++11容器的insert怎么使用

本篇内容介绍了“C++11容器的insert怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从C++98到C++11C++98中的in
2023-06-19

C++11中的chrono库怎么使用

本篇内容介绍了“C++11中的chrono库怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言C++11提供了日期时间相关的库chr
2023-07-05

C++11的decltype修饰符怎么使用

本篇内容介绍了“C++11的decltype修饰符怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能介绍在存在初始化代码的情况下,可
2023-06-19

C++11的函数对象怎么使用

这篇文章主要介绍“C++11的函数对象怎么使用”,在日常操作中,相信很多人在C++11的函数对象怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11的函数对象怎么使用”的疑惑有所帮助!接下来,请跟
2023-06-19

C++11的lambda表达式怎么使用

这篇文章主要讲解了“C++11的lambda表达式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的lambda表达式怎么使用”吧!可变lambda假设有如下vector,保
2023-06-19

c++中使用swap函数报错怎么解决

在 C++ 中使用 swap 函数报错可能有多种原因,以下是一些常见的解决方法:确保你包含了正确的头文件:swap 函数位于 头文件中,所以在使用 swap 函数之前,需要包含该头文件。#include
c++中使用swap函数报错怎么解决
2024-02-29

C++11中的stoi和stod怎么使用

这篇文章主要介绍“C++11中的stoi和stod怎么使用”,在日常操作中,相信很多人在C++11中的stoi和stod怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11中的stoi和stod怎
2023-07-04

C++11的override说明符怎么使用

本篇内容主要讲解“C++11的override说明符怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11的override说明符怎么使用”吧!多态和虚函数多态是C++的重要特征之一,
2023-06-19

C++11的function类模版怎么使用

这篇文章主要介绍“C++11的function类模版怎么使用”,在日常操作中,相信很多人在C++11的function类模版怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11的function类
2023-06-19

swap和zram swap怎么在Linux系统中使用

swap和zram swap怎么在Linux系统中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。磁盘 swap:是把磁盘的一部分作为内存, 对应用来说完全是
2023-06-12

C++11关键字const怎么使用

本篇内容主要讲解“C++11关键字const怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11关键字const怎么使用”吧!一、历史按理来说,要想了解一件事物提出的原因,最好的办法
2023-06-25

C++11随机数库怎么使用

本篇内容主要讲解“C++11随机数库怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11随机数库怎么使用”吧!从前的随机数C++11之前,无论是C,还是C++都使用相同方式的来生成随
2023-06-19

C++11的cbegin和cend函数怎么使用

本篇内容介绍了“C++11的cbegin和cend函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const迭代器先看下面的程序:
2023-06-19

C++11中的lambda表达式怎么使用

本篇内容介绍了“C++11中的lambda表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!可调用对象对于一个表达式e,如果可以编
2023-06-19

C++11的const怎么引用

本篇内容介绍了“C++11的const怎么引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const引用在C++语言中,引用是作为一种高效
2023-06-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录