c++ - `std::sample()` 的输出序列是否遵循输入序列的顺序?
问题描述
的输出序列是否std::sample()
遵循输入序列的顺序?
例如,
const std::vector<int> input{2, 4, 6, 8, 1, 3, 5, 7};
std::vector<int> output;
std::sample(input.begin(), input.end(), std::back_inserter(output), 3, any_urbg);
是否保证output
永远不可能[1, 2, 3]
?
解决方案
关于std::sample
状态的参考:
仅当PopulationIterator满足LegacyForwardIterator的要求时,算法才是稳定的(保留所选元素的相对顺序)
这里的PopulationIterator是 的迭代器std::vector
。的迭代器std::vector
是一个LegacyRandomAccessIterator ,它满足 LegacyBidirectionalIterator 的类型,而后者又满足LegacyForwardIterator的类型。
所以,是的,可以保证输出永远不可能,[1, 2, 3]
因为这会违反所选元素的相对顺序,即[2, 1, 3]
.
推荐阅读
- r - xy.coords(x, y, xlabel, ylabel, log) 中的错误:“x”和“y”长度不同
- r - lme4 R 包中双重嵌套主题的模型
- html - 文本不重叠图像css
- css - 在服务器部分找不到外部样式表
- python - 如何从熊猫数据框中的一行中删除特定值?
- r - 使用交叉验证在 r 中为 knn 方法编写 for 循环
- reactjs - 当我从 React 的后端获取数据时,如何在 url 中获取 id?
- c - C中的getline()创建一个无限循环并跳过第一个单词?
- itext - 具有图形文本效果的文本元素
- java - 二维数组将一行中的所有数字相加,对角线索引除外