需要从一个原始数据源(长度m,每个数不同)里随机出n个不同的数(n<=m)
1 vector<int> rand_num_src; 2 for (int i = 1; i <= 20; ++i) 3 { 4 rand_num_src.push_back(i); 5 } 6 7 int m = (int)rand_num_src.size(); 8 int n = 10;
写法一:
每随机出一个新的数,需要跟已经随机出来的数作比较,来保证每个数不同。但是while(true)始终是个危险的写法。
1 vector<int> index_1; 2 for (int i = 0; i < n; ++i) 3 { 4 while(true) 5 { 6 int ram_num = rand() % m + 1; 7 bool sign = false; 8 for (int j = 0; j < (int)index_1.size(); j++) 9 { 10 if (index_1[j] == ram_num) 11 { 12 sign = true; 13 break; 14 } 15 } 16 if (!sign) 17 { 18 index_1.push_back(ram_num); 19 break; 20 } 21 } 22 }
写法二:
用一个新的vector记录数据源,随机出一个数,则把它从这个vector中去掉。下一次从这个新的vector中随机,这样同样保证每个数不同。
1 vector<int> index_2; 2 vector<int> random_list; 3 4 for (int i = 0; i < m; ++i) 5 { 6 random_list.push_back(rand_num_src[i]); 7 } 8 9 for (int i = 0; i < n; ++i) 10 { 11 int rand_num_index = rand() % (int)random_list.size(); 12 index_2.push_back(random_list[rand_num_index]); 13 random_list.erase(random_list.begin() + rand_num_index); 14 }