C++的set容器是一个顺序容器,而random_shuffle又可以打乱容器中元素的顺序,那么对有序容器set使用random_shuffle会出现什么情况呢?
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<ctime>
using namespace std;
// random_shuffle(iterator beg, iterator end);
// 指定范围内的元素随机调整次序
// beg 开始迭代器
// end 结束迭代器
void myPrint(int& val)
{
cout << val << " ";
}
void test01()
{
vector<int> v;
srand((unsigned int)time(NULL)); // 增加随机性
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
cout << "排序前: ";
for_each(v.begin(), v.end(), myPrint);
cout << endl;
random_shuffle(v.begin(), v.end());
cout << "排序后: ";
for_each(v.begin(), v.end(), myPrint);
cout << endl;
}
#include<set>
void myPrint_(set<int>& s)
{
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test02()
{
set<int> s;
for (int i = 0; i < 10; i++)
{
s.insert(i);
}
cout << "排序前: ";
myPrint_(s);
random_shuffle(s.begin(), s.end());
cout << "排序后: ";
myPrint_(s);
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
在test02()中,对set使用random_shuffle,结果报了两个错误,是代码哪里有问题,还是编译器不允许对set使用random_shuffle?