C++如何随机打乱数组中的元素
时间: 2023-08-15 11:03:30 浏览: 371
在C++中,你可以使用`std::shuffle()`函数来随机打乱数组中的元素。首先,包含 `<algorithm>` 和 `<random>` 头文件,然后使用以下代码来实现:
```cpp
#include <iostream>
#include <algorithm>
#include <random>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
// 使用默认的随机设备引擎
std::random_device rd;
std::mt19937 g(rd());
// 使用 shuffle 函数随机打乱数组元素
std::shuffle(arr, arr + size, g);
// 输出打乱后的数组元素
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
return 0;
}
```
这段代码会将数组 `arr` 中的元素随机打乱,并输出结果。注意,使用 `std::shuffle()` 需要提供一个随机数生成器引擎作为参数,这里使用了 Mersenne Twister 引擎 `std::mt19937`。
相关问题
c++17怎么打乱数组
你可以使用C++标准库中的`std::shuffle`函数来打乱数组。这个函数需要两个迭代器参数,表示要打乱的数组的范围。下面是一个示例代码:
```cpp
#include <iostream>
#include <algorithm>
#include <random>
#include <vector>
int main() {
std::vector<int> arr = {1, 2, 3, 4, 5};
// 创建随机数引擎
std::random_device rd;
std::mt19937 rng(rd());
// 使用shuffle函数打乱数组
std::shuffle(arr.begin(), arr.end(), rng);
// 输出打乱后的数组
for (const auto& num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
这段代码使用了`std::vector`来存储数组,你也可以使用普通的数组。`std::random_device`用于生成随机数种子,`std::mt19937`是一个随机数引擎,`std::shuffle`函数接受一个范围的迭代器和一个随机数引擎作为参数,它会对指定范围内的元素进行随机重排。
运行以上代码,你会得到类似如下的输出:
```
4 2 5 3 1
```
这就是打乱后的数组。希望这能帮到你!如果有任何问题,请随时提问。
c++数组中随机选择
在C++中,如果你想要从数组中随机选择一个元素,可以采用以下几种方法:
1. **`<random>`库**:C++11及以上版本引入了 `<random>` 和 `<cstdlib>` 库,你可以创建一个随机数生成器,并用它来决定数组中的索引。例如:
```cpp
#include <iostream>
#include <vector>
#include <random>
int getRandomElement(std::vector<int> &arr) {
std::random_device rd;
std::mt19937 gen(rd()); // Mersenne Twister generator
std::uniform_int_distribution<> dis(0, arr.size() - 1); // Generate random index in range
return arr[dis(gen)];
}
int main() {
std::vector<int> myArray = {1, 2, 3, 4, 5};
int randomIndex = getRandomElement(myArray);
std::cout << "Random element: " << myArray[randomIndex] << std::endl;
return 0;
}
```
2. **`std::shuffle`函数**:如果使用的C++标准库支持,可以使用 `std::shuffle` 函数直接打乱数组,然后取第一个元素作为随机选择。
```cpp
#include <algorithm>
#include <vector>
// ...
std::vector<int> shuffledArray = myArray; // Copy the array
std::shuffle(shuffledArray.begin(), shuffledArray.end(), rd); // Shuffle it
int randomElement = shuffledArray.front(); // Select the first element after shuffling
```
阅读全文