名稱空間
變體
操作

std::experimental::sample

來自 cppreference.com
< cpp‎ | 實驗性
 
 
實驗性
技術規範
檔案系統庫 (檔案系統 TS)
庫基礎 (庫基礎 TS)
庫基礎 2 (庫基礎 TS v2)
庫基礎 3 (庫基礎 TS v3)
並行性擴充套件 (並行性 TS)
並行性擴充套件 2 (並行性 TS v2)
併發性擴充套件 (併發性 TS)
併發擴充套件 2 (併發 TS v2)
概念 (概念 TS)
範圍 (範圍 TS)
反射 (反射 TS)
數學特殊函式 (特殊函式 TR)
實驗性非 TS
模式匹配
線性代數
std::execution
契約
2D 圖形
 
 
定義於標頭檔案 <experimental/algorithm>
template< class PopulationIterator, class SampleIterator,

          class Distance, class URBG >
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n,

                       URBG&& g );
(1) (庫基礎 TS)
template< class PopulationIterator, class SampleIterator, class Distance >

SampleIterator sample( PopulationIterator first, PopulationIterator last,

                       SampleIterator out, Distance n );
(2) (庫基礎 TS v2)

從序列 [firstlast) 中選擇 n 個元素,使得每個可能的樣本出現機率相等,並將這些選定的元素寫入輸出迭代器 out

如果 n 大於序列中的元素數量,則選擇 last - first 個元素。

僅當 PopulationIterator 滿足 LegacyForwardIterator 的要求時,該演算法才是穩定的。

1) 使用隨機數生成器 g 生成隨機數。
2) 使用每執行緒引擎生成隨機數。

目錄

[編輯] 引數

first, last - 形成取樣範圍(總體)的一對迭代器
out - 寫入樣本的輸出迭代器。不得在範圍 [firstlast)
n - 要取樣的數量
g - 用作隨機性來源的隨機數生成器
-
PopulationIterator 必須滿足 LegacyInputIterator 的要求。
-
SampleIterator 必須滿足 LegacyOutputIterator 的要求。
-
如果 PopulationIterator 不滿足 LegacyForwardIterator,則 SampleIterator 也必須滿足 LegacyRandomAccessIterator 的要求。
-
PopulationIterator 的值型別必須可寫入 out
-
Distance 必須是整數型別。
-
URBG 必須滿足 UniformRandomBitGenerator 的要求,並且其返回型別必須可轉換為 Distance

[編輯] 返回值

返回 out 在輸出最後一個樣本之後的一個副本,即樣本範圍的末尾。

[編輯] 複雜度

std::distance(first, last) 成線性關係。

[編輯] 注意

此函式可以實現選擇取樣或水塘取樣。

[編輯] 示例

#include <experimental/algorithm>
#include <iostream>
#include <iterator>
#include <random>
#include <string>
 
int main()
{
    std::string in = "abcdefgh", out;
    std::experimental::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 : cdefg

[編輯] 另請參閱

(C++17 前)(C++11)
隨機地重排一個範圍中的元素
(函式模板) [編輯]