我有一个简单的数组,有 20 个成员长,我从中读取一个值,一次一个。
出于测试目的,该数组当前如下所示:
int PhaseTesting1Array[20] = { 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
Run Code Online (Sandbox Code Playgroud)
我需要做的是随机化每个成员,以便每个成员随机为 1 或 0,并且每个成员的数量相等(10 个 1 和 10 个 0),但我很难弄清楚该怎么做得到相同数量的 1 和 0 使用rand这似乎是我应该使用的。
您可以使用std::shuffle包含 10 个 1 和 10 个 0 的预定义向量。以下代码稍微改编自cppreference.com。
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
Run Code Online (Sandbox Code Playgroud)
您也可以std::random_shuffe(I first, I last)在不使用内部使用的随机数分布参数的情况下使用rand,但这已被弃用并在 C++17 中删除。