C++中除了使用rand和srand函数产生随机数,STL中提供了一个更便捷的方法,即random_shuffle函数。
这篇博客主要总结一下random_shuffle()的用法,rand和srand函数可以参考我的另一篇博客:
C++随机数:rand和srand函数总结
https://blog.csdn.net/m0_49070560/article/details/108557117.
接下来我们说random_shuffle()。
random_shuffle() 函数原型如下:
template<class RandomAccessIterator>
void random_shuffle(
RandomAccessIterator _First, //指向序列首元素的迭代器
RandomAccessIterator _Last //指向序列最后一个元素的下一个位置的迭代器
);
这是一个函数模板,不知道什么叫模板的可以看这里:C++函数模板.
它有两个参数,参数一为指向序列首元素的迭代器,参数二为指向序列最后一个元素的下一个位置的迭代器。
首先我们用vector定义一个对象并赋值,注意包含vector的头文件:
//头文件#include <vector>
vector<int> vec;
for(int i=11 ; i < 26 ; i++)
{
vec.push_back(i);
}
然后调用random_shuffle();
random_shuffle(vec.begin(),vec.end());
这里需要注意,random_shuffle函数和rand函数一样,需要一个能产生不同值的种子,没有的种子的话每次运行的结果都是相同的随机数序列。
种子的生成方式和rand一样:
// 头文件 #include <time.h>
srand(time(0));
遍历输出:
1.for_each();
函数原型如下:
template<typename _InputIterator, typename _Function>
for_each(
_InputIterator __first, //指向序列首元素的迭代器
_InputIterator __last, //指向序列最后一个元素的下一个位置的迭代器
_Function __f //函数
);
它的第三个参数是一个函数,可以用来执行具体的实现,比如输出,注意这里的参数必须和vector一样。
void i(int i) //输出 i
{
cout << i << " ";
}
// 头文件 #include <algorithm>
for_each(vec.begin(),vec.end(),i);
运行结果:
14 21 12 23 11 15 20 24 19 18 17 16 22 13 25
2.at();
at 函数的用法和下标运算差不多,它的优点在于如果出现越界,程序不会直接崩溃,而是会给出一个异常,我们可以对这个异常进行处理。
for(size_t i=0 ; i < vec.size() ; i++)
{
cout << vec.at(i) << " ";
}
运行结果:
22 16 24 12 17 14 21 15 25 20 23 19 18 11 13
3.重载下标运算符
vector中对下标运算符进行了重载,这里可以直接使用。
for(size_t i=0 ; i < vec.size() ; i++)
{
cout << vec[i] << " ";
}
运行结果:
13 23 19 16 12 25 22 15 24 14 20 11 18 17 21
4.使用迭代器
vector<int> :: iterator ite = vec.begin(); //迭代器指向头元素
for(ite ; ite != vec.end() ; ite++)
{
cout << *ite <<" ";
}
运行结果:
12 20 13 18 22 21 17 25 11 19 14 15 23 24 16
获得单个随机数:
1.at();
可以用变量获取:
int a = vec.at(0);
cout << a << endl;
或者直接获取:
cout << vec.at(1) << endl;
2.下标运算
cout << vec[3] << endl;
3.back();
// back() 返回最后一个元素
cout << vec.back();
4.使用迭代器
vector<int> :: iterator ite = vec.begin();
cout << *ite;
今天的文章random_shuffle函数生成随机数分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24485.html