关于最新的libstdc ++(c ++ 17)中的新std::sample
的几个问题。
为什么根据原始输入字符串对输出进行排序?如果您遵循文档here
中的示例#include <iostream>
#include <random>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
std::string in = "abcdefgh", out;
std::sample(in.begin(), in.end(), std::back_inserter(out),
5, std::mt19937{std::random_device{}()});
std::cout << "five random letters out of " << in << " : " << out << '\n';
}
可能的输出:
five random letters out of abcdefgh : adfgh
输出始终按字母数字顺序。如果反转输入字符串,则输出将始终按字母数字顺序反转。它也可以不更换而取样,我想这与我下面的问题有关。
文档说该函数可以实现选择和储层采样,两者之间有什么区别以及如何使用std::sample
来实现? / p>
我也不确定为什么该函数使用back_inserter_iterator
而没有其他insert_iterator
。