泛型算法(十二)之交换算法

1、iter_swap(ForwardIterator1 a, ForwardIterator2 b):交换两个迭代器所指的元素对象

    std::vector<int> c;
    //向c中添加元素
    for (int i = 0; i < 10; i++)
    {
        c.push_back(i);
    }
    //交换c中首尾元素
    std::iter_swap(c.begin(), c.end() - 1);

    for (auto var : c)
    {
        std::cout << var<<",";
    }
    //打印结果:9,1,2,3,4,5,6,7,8,0,

2、swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2):交换两个序列中对应的元素

    std::vector<int> c1;
    std::vector<int> c2;
    //向c1,c2中添加元素
    for (int i = 0; i < 10; i++)
    {
        c1.push_back(i);
        c2.push_back(i * 100);
    }
    //交换c1,c2中对应元素
    std::swap_ranges(c1.begin(), c1.end(), c2.begin());
    //输出c1
    for (auto var : c1)
    {
        std::cout << var<<",";
    }
    //打印结果:0,100,200,300,400,500,600,700,800,900,

3、swap(T& a, T& b):交换两个对象。优先使用移动语义

class Test
{
public:
    Test(int x)
    {
        a = x;
    }

    void print()
    {
        std::cout << a << ",";
    }

private:
    int a;
};
int _tmain(int argc, _TCHAR* argv[])
{

    Test test1(1);
    Test test2(2);

    std::swap(test1, test2);

    test1.print();    //打印结果:2
    test2.print();    //打印结果:1
}

4、swap(T (&a)[N], T (&b)[N]):交换两个对象数组

class Test
{
public:
    Test(){ a = 0; }

    Test(int x)
    {
        a = x;
    }

    void print()
    {
        std::cout << a << ",";
    }

private:
    int a;
};
int _tmain(int argc, _TCHAR* argv[])
{
    Test a[32];
    Test b[32];

    Test test1(1);
    a[0] = test1;

    Test test2(2);
    b[0] = test2;

    std::swap(a, b);

    a[0].print();    //打印结果:2
    b[0].print();    //打印结果:1
}
时间: 2024-10-26 20:29:47

泛型算法(十二)之交换算法的相关文章

数据结构(十二)——排序算法

数据结构(十二)--排序算法 一.排序简介 1.排序的一般定义 排序是计算机中经常进行的操作,目的在于将一组无序的数据元素调整为有序的数据元素.序列:1,20,45,5,2,12排序后:1,2,5,12,20,45 2.排序的数学定义 3.排序的稳定性 如果序列中的两个元素R[i].R[j],关键字分别为K[i].K[j],并且在排序之前R[i]排在R[j]前面,如果排序操作后,元素R[i]仍然排在R[j]前面,则排序方法是稳定的:否则排序是不稳定的. 4.排序实现的关键 比较:任意两个数据元素

CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现

CRC16算法系列文章: CRC16算法之一:CRC16-CCITT-FALSE算法的java实现 CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现 CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现 前言 CRC16算法有很多种,本篇文章会介绍其中的CRC16-CCITT-XMODEM算法 功能 实现CRC16-CCITT-XMODEM算法 支持int.short类型 支持选择数组区域计算 实现 package cc.eguid.crc16;

浅谈算法和数据结构: 十二 无向图相关算法基础

从这篇文章开始介绍图相关的算法,这也是Algorithms在线课程第二部分的第一次课程笔记. 图的应用很广泛,也有很多非常有用的算法,当然也有很多待解决的问题,根据性质,图可以分为无向图和有向图.本文先介绍无向图,后文再介绍有向图. 之所以要研究图,是因为图在生活中应用比较广泛: 无向图 图是若干个顶点(Vertices)和边(Edges)相互连接组成的.边仅由两个顶点连接,并且没有方向的图称为无向图. 在研究图之前,有一些定义需要明确,下图中表示了图的一些基本属性的含义,这里就不多说明. 图的

第四十二课 KMP算法的应用

思考: replace图解: 程序完善: DTString.h: 1 #ifndef DTSTRING_H 2 #define DTSTRING_H 3 4 #include "Object.h" 5 6 namespace DTLib 7 { 8 9 class String : Object 10 { 11 protected: 12 char* m_str; 13 int m_length; 14 15 void init(const char* s); 16 bool equa

五大常用算法之二:动态规划算法

转自:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html 一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息.在求解任一子问题时,列出各种

(转)五大常用算法之二:动态规划算法

一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息.在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解.依次解决各子问题,最后一个子问题就是初始问题的解. 由于动态规划解决

数据结构&amp;算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)

什么是算法: 间而言之算法(Algorithm):一个计算过程,解决问题的方法 递归的两个特点: 调用自身 结束条件 递归示例: def func(x): if x==0: print("我的小鲤鱼",end='') else: print("抱着",end='') func(x-1) print("的我",end="") func(5) 递归示例一:我的小鲤鱼 ''' 1 1 2 3 5 8 13 21 34 输出长度为 n

一个名声不好的排序算法(二)——冒泡排序算法

转载请注明出处,谢谢! 冒泡排序算法思想: 自下而上(或上而下)扫描记录序列,相邻的两条记录Ri与Ri-1(或Ri+1)如果是逆序,则交换位置. 交换排序 冒泡排序 快速排序 算法说明 一个名声不太好的算法 排序是稳定的 ArrayList实现: import java.util.ArrayList; import java.util.Random; public class Bubble { public static void sort(ArrayList<Integer> al) { i

疯子的算法总结(二) STL Ⅰ 算法 ( algorithm )

写在前面: 为了能够使后续的代码具有高效简洁的特点,在这里讲一下STL,就不用自己写堆,写队列,但是做为ACMer不用学的很全面,我认为够用就好,我只写我用的比较多的. 什么是STL(STl内容): 容器(Container): 是一种数据结构,如list,vector,和deques ,以模板类的方法提供.为了访问容器中的数据,可以使用由容器类输出的迭代器: 迭代器(Iterator): 提供了访问容器中对象的方法.例如,可以使用一对迭代器指定list或vector中的一定范围的对象.迭代器就

五种常用算法之二:动态规划算法

动态规划算法: 基本思想: 动态规划算法通常用于求解具有某种最优性质的问题.在这类问题中,可能会有许多可行解.每一个解都对应于一个值,我们希望找到具有最优值的解.动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解.与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的.若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次.如果我们能够保存已解决的子问题的答案,而在需要时再找