random_shuffle(stl算法)打乱顺序

random_shuffle (stl算法)打乱顺序 

2012-03-31 10:39:11|  分类: 算法 |  标签: |举报 |字号 订阅

   random_shuffle()是个完全通用的算法-适用于内建的数据类型和用户自定义类型。下面的例子创建了一个有7个字符串对象的向量,它包含一周的天数并使用random_shuffle()打乱他们的排列顺序:

#include <string>  
 #include <vector> 
 #include <algorithm> 
 #include <iostream>  
using namespace std; 
 int main()  {  
  vector<string> vs; 
  vs.push_back(string ("Sunday"));  
  vs.push_back (string ("Monday"));
   ...  
  vs.push_back (string ("Saturday"));
  random_shuffle(vs.begin(),
  vs.end()); /* 打乱顺序 */  
  for (int i = 0; i << 7; i++)  
     cout<<vs[i]; /* 显示打乱顺序后的元素 */ 
 }

### C++ STL 算法列表及功能 C++ 的标准模板库(STL)提供了丰富的算法集合,这些算法可以用于各种数据结构操作。以下是常见的 STL 算法分类及其功能描述: #### 1. **非修改序列算法** 这类算法主要用于遍历和查询容器中的元素。 - `for_each`:对范围内的每个元素执行特定的操作[^2]。 - `find` 和 `find_if`:分别通过值或条件查找第一个匹配的元素[^3]。 - `count` 和 `count_if`:统计满足特定条件的元素数量。 - `search`:在一个范围内寻找另一个子范围的第一个出现位置[^3]。 #### 2. **修改序列算法** 此类算法会对容器的内容进行更改。 - `copy` 和 `move`:将一个范围的数据复制或移动到另一范围[^3]。 - `replace` 和 `replace_if`:替换符合条件的元素。 - `transform`:通过对输入范围应用函数来生成新的输出范围。 #### 3. **排序与相关算法** 这是最常用的算法之一,支持多种排序方式以及基于已排序数据的操作。 - `sort`:对给定范围按升序或其他自定义顺序排序。 - `stable_sort`:保持相等元素相对次序的同时对其进行排序。 - `partial_sort`:仅对前 N 个最小(最大)元素进行排序[^3]。 - `nth_element`:使第 n 个元素位于其最终有序位置上。 #### 4. **数值算法** 专门处理数值计算的任务。 - `accumulate`:累加一系列数的结果[^3]。 - `inner_product`:两个序列对应项乘积之和。 - `adjacent_difference` 和 `partial_sum`:分别为相邻差分和部分求和运算提供支持[^3]。 #### 5. **排列组合算法** 帮助生成不同的排列和组合形式。 - `next_permutation` 和 `prev_permutation`:生成下一个更大的字典序排列或者更小的一个[^4]。 - `random_shuffle` (已被废弃,在 C++17 中推荐使用 `shuffle`):随机打乱某个区间内元素的位置。 #### 示例代码展示 下面给出一段简单的例子演示如何利用某些上述提到过的 STL 算法完成具体任务: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; bool isEven(int num){ return !(num % 2); } int main(){ vector<int> nums = {9, 8, 7, 6, 5, 4}; // 使用 find_if 查找首个偶数 auto evenIt = find_if(nums.begin(), nums.end(), isEven); if(evenIt != nums.end()){ cout << "First Even Number: " << *evenIt << endl; } // 计算总和 int sum = accumulate(nums.begin(), nums.end(), 0); cout << "Sum of all elements: " << sum << endl; // 进行降序排序 sort(nums.rbegin(), nums.rend()); for(auto& val : nums){ cout << val << ' '; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值