如何用random shuffle函数打乱一个vector容器
时间: 2023-12-16 19:04:31 浏览: 540
你可以使用`std::random_shuffle`函数来打乱一个`vector`容器。这个函数需要两个参数:`first`和`last`,分别表示要打乱的元素的起始位置和结束位置。以下是一个简单的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
// 创建一个有序的 vector 容器
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 打乱 vector 容器
std::random_shuffle(vec.begin(), vec.end());
// 输出打乱后的 vector 容器
for (auto i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
输出:
```
9 6 2 5 1 7 4 8 3
```
注意,`std::random_shuffle`函数在 C++17 中已被弃用,可以使用`std::shuffle`函数来代替。`std::shuffle`函数用法与`std::random_shuffle`类似,但需要额外传入一个随机数生成器作为参数。
相关问题
C十十中random_shuffle函数
C++中的 `random_shuffle` 函数是一个标准库算法,用于随机地重新排列给定范围内的元素。这个函数是在 `<algorithm>` 头文件中声明的,并且可以在C++98标准中使用。从C++14开始,`random_shuffle` 已被移除标准库,建议使用 `std::shuffle` 或其他方法来达到相同的随机排列效果。
`random_shuffle` 函数有两种重载形式:
1. 使用默认的随机数生成器:
```cpp
void random_shuffle (RandomAccessIterator first, RandomAccessIterator last);
```
这个版本使用一个默认的随机数发生器来打乱从 `first` 到 `last`(不包括 `last`)的元素顺序。
2. 使用特定的随机数生成器:
```cpp
void random_shuffle (RandomAccessIterator first, RandomAccessIterator last, RandomNumberGenerator& gen);
```
这个版本接受一个额外的随机数生成器参数 `gen`,用于生成随机数序列,从而决定元素的排列。
使用 `random_shuffle` 的示例代码如下:
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> myvector {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 使用默认随机数生成器打乱元素
std::random_shuffle(myvector.begin(), myvector.end());
// 输出打乱后的元素
for (int i : myvector) {
std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}
```
由于C++14之后标准库不再支持 `random_shuffle`,可以考虑以下替代方法:
1. 使用 `std::shuffle`,它需要一个额外的随机数生成器,如 `<random>` 头文件中的 `std::default_random_engine`。
2. 使用 `<random>` 头文件中提供的随机数生成器和分布来自己实现随机排列算法。
random shuffle
random_shuffle()是一个用于打乱列表元素顺序的函数。它接受一个迭代器范围作为参数,并将该范围内的元素打乱顺序。需要注意的是,该函数不会生成新的列表,而是直接在原列表上进行操作。
下面是一个使用random_shuffle()的示例代码:
```
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::srand(unsigned(std::time(0))); // 设置随机数种子
std::random_shuffle(vec.begin(), vec.end());
for (const auto& num : vec) {
std::cout << num << " ";
}
return 0;
}
```
这段代码首先使用srand()函数设置随机数种子,确保每次运行结果都是随机的。然后使用random_shuffle()函数将vec中的元素打乱顺序,并通过循环输出打乱后的结果。
阅读全文