C++ STL变序型算法 对元素重新洗牌 shuffle、random_shuffle使用方法

C++ STL变序型算法 对元素重新洗牌 shuffle、random_shuffle使用方法将[First,Last)区间中的元素次序打乱重新洗牌,使用你给定的随机数引擎_Func使用一个均匀分布随机数产生器打乱[First,Last)区间内的元素次序使用_RngFunc打乱[First,Last)区间内的元素次序.算法内部使用一个整数值来调用_RngFunc(max),返回一个大于0,小于max的随机数,不包括max本身复杂度:线性,执行numElems-1次交换使…

在这里插入图片描述

将[First, Last)区间中的元素次序打乱重新洗牌,使用你给定的随机数引擎_Func

在这里插入图片描述

使用一个均匀分布随机数产生器打乱[First, Last)区间内的元素次序

在这里插入图片描述

使用_RngFunc打乱[First, Last)区间内的元素次序.算法内部使用一个整数值来调用_RngFunc(max),返回一个大于0,小于max的随机数,不包括max本身

复杂度:线性,执行numElems-1次交换

使用例子:

template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{ 
   
	for (int i = first; i <= last; ++i)
	{ 
   
		coll.insert(coll.end(), i);
	}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{ 
   
	cout << optcstr;
	for (auto elem : coll)
	{ 
   
		cout << elem << ' ';
	}
	cout << endl;

}
int main()
{ 
   
	vector<int>a;
	INSERT_ELEMENTS(a, 1, 9);
	PRINT_ELEMENTS(a, "a: ");
	random_shuffle(a.begin(), a.end());
	PRINT_ELEMENTS(a, "shuffled: ");
	sort(a.begin(), a.end());
	PRINT_ELEMENTS(a, "sorted: ");
	default_random_engine dre;
	shuffle(a.begin(), a.end(), dre);
	PRINT_ELEMENTS(a, "shuffled: ");
}

在这里插入图片描述

使用自定义的随机数生成器传给random_shuffle:

template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{ 
   
	for (int i = first; i <= last; ++i)
	{ 
   
		coll.insert(coll.end(), i);
	}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{ 
   
	cout << optcstr;
	for (auto elem : coll)
	{ 
   
		cout << elem << ' ';
	}
	cout << endl;

}
class MyRandom
{ 
   
public:
	ptrdiff_t operator()(ptrdiff_t max)
	{ 
   
		double tmp;
		tmp = static_cast<double>(rand()) / static_cast<double>(RAND_MAX);
		return static_cast<ptrdiff_t>(tmp * max);
	}
};

int main()
{ 
   
	vector<int>a;
	INSERT_ELEMENTS(a, 1, 9);
	PRINT_ELEMENTS(a, "a: ");
	MyRandom rd;
	random_shuffle(a.begin(), a.end(), rd);
	PRINT_ELEMENTS(a, "shuffled: ");
}

在这里插入图片描述

今天的文章C++ STL变序型算法 对元素重新洗牌 shuffle、random_shuffle使用方法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33051.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注