STL学习笔记----13.STL算法之 (变序性算法)

 

一. 概述

变序性算法改变元素次序,但不改变元素值。这些算法不能用于关联式容器,因为关联式容器中,元素有一定的次序。

reverse()将元素的次序逆转
reverse_copy()复制的同时,逆转元素顺序
rotate()旋转元素次序
rotate_copy()复制的同时,旋转元素顺序
next_permutation()得到元素的下一个排列次序
prev_permutation()得到元素的上一个排列次序
random_shuffle()将元素的次序次序随机打乱
partition()改变元素次序,使符合某准则者移到前面
stable_partition()与partition()相似,但保持符合准则与不符合准则各个元素之间的相对位置
二. 逆转元素次序

  1. //将区间[beg, end)内的元素全部逆序 
  2. void 
  3. reverse (BidirectionalIterator beg, BidirectionalIterator end) 
  4.  
  5. //将源区间[beg, end)内元素复制到以destBeg起始目标区间, 
  6. //并在复制过程中逆序 
  7. OutputIterator 
  8. reverse_copy (BidirectionalIterator sourceBeg, BidirectionalIterator  
  9.               sourceEnd,  
  10.               Output Iterator destBeg) 
//将区间[beg, end)内的元素全部逆序
void
reverse (BidirectionalIterator beg, BidirectionalIterator end)

//将源区间[beg, end)内元素复制到以destBeg起始目标区间,
//并在复制过程中逆序
OutputIterator
reverse_copy (BidirectionalIterator sourceBeg, BidirectionalIterator 
              sourceEnd, 
              Output Iterator destBeg)
三. 旋转元素次序

1. 旋转序列内的元素

  1. //将区间[beg, end)内的元素进行旋转,执行后*newBeg成为新的第一元素 
  2. //调用者必须确保newBeg是区间[beg, end)内的一个有效位置 
  3. void 
  4. rotate (ForwardIterator beg,  
  5.         ForwardIterator newBeg,  
  6.         ForwardIterator end) 
//将区间[beg, end)内的元素进行旋转,执行后*newBeg成为新的第一元素
//调用者必须确保newBeg是区间[beg, end)内的一个有效位置
void
rotate (ForwardIterator beg, 
        ForwardIterator newBeg, 
        ForwardIterator end)
2. 复制并同时旋转元素
  1. //将源区间[sourceBeg, sourceEnd)内的元素复制到以destBeg起始的目标区间中, 
  2. //同时旋转元素,使newBeg成为新的第一个元素 
  3. OutputIterator 
  4. rotate_copy (ForwardIterator sourceBeg,  
  5.              ForwardIterator newBeg,  
  6.              ForwardIterator sourceEnd,  
  7.              OutputIterator destBeg) 
//将源区间[sourceBeg, sourceEnd)内的元素复制到以destBeg起始的目标区间中,
//同时旋转元素,使newBeg成为新的第一个元素
OutputIterator
rotate_copy (ForwardIterator sourceBeg, 
             ForwardIterator newBeg, 
             ForwardIterator sourceEnd, 
             OutputIterator destBeg)
四. 排列元素
  1. bool 
  2. next_permutation (BidirectionalIterator beg, BidirectionalIterator end) 
  3.  
  4. bool 
  5. prev_permutation (BidirectionalIterator beg, BidirectionalIterator end) 
bool
next_permutation (BidirectionalIterator beg, BidirectionalIterator end)

bool
prev_permutation (BidirectionalIterator beg, BidirectionalIterator end)
五. 随机排序

  1. //使一个均匀分布随机数来打乱区间[beg, end)内的元素 
  2. void 
  3. random_shuffle (RandomAccessIterator beg, RandomAccessIterator end) 
  4.  
  5. //使用op打乱区间[beg, end)内的元素次序 
  6. void 
  7. random_shuffle (RandomAccessIterator beg, RandomAccessIterator end,  
  8.                 RandomFunc& op) 
//使一个均匀分布随机数来打乱区间[beg, end)内的元素
void
random_shuffle (RandomAccessIterator beg, RandomAccessIterator end)

//使用op打乱区间[beg, end)内的元素次序
void
random_shuffle (RandomAccessIterator beg, RandomAccessIterator end, 
                RandomFunc& op)
六. 将元素向前搬移

  1. //将区间[beg, end)中使op(elem)为true的元素向前移动 
  2. BidirectionalIterator 
  3. partition (BidirectionalIterator beg, BidirectionalIterator end, 
  4.            UnaryPredicate op) 
  5.  
  6. //会保持它们之前的相对次序 
  7. BidirectionalIterator 
  8. stable_partition (BidirectionalIterator beg, BidirectionalIterator end,  
  9.                   UnaryPredicate op) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值