C++17を知るその7~教育委員会~

ちょっと間が空いて久しぶりのC++17。

今回もライブラリ関連。

・範囲から指定された個数の要素をランダムに抽出する
std::sample

ランダムといえばC++11でライブラリrandomが追加されて

こんなのが使えるようになりました。
範囲指定であれば

[0, 99] の範囲をこんな感じでできました。

今回のsampleは範囲から指定された個数を抽出になります。

ちなみに計算量は範囲の数に対して線形時間O(n)になるのでお気を付けを。

・左辺値参照をconst左辺値参照にする
std::as_const

constは意図しないデータ変更を防ぐ、constがついていれば変更しないデータであることがわかります。

結果は

となります。

上記上記の例ではメンバー関数でconst版、非const版が存在しているものです。
const宣言していないオブジェクトaは呼び出したときに非constの関数が呼ばれていて、
そのあとas_constによってconst版が呼ばれています。

as_constを使用することによってキャストしたり、const版を呼ぶための実装がすっきりします。

・任意個数の引数をとってbool型を返す関数オブジェクトを受け取り、戻り値を論理反転する関数オブジェクトに変換する
std::not_fn

論理反転なので

上記の例でfuncの関数オブジェクトが反転されるので引数が0の場合はfalse、それ以外がtrueとなっています。
ちなみにstd::not_fnの追加に伴い以下の関数が非推奨になります。
・std::not1()
・std::not2()
こんなのあったのか..

短いですが今回はこれまで。

過去分
C++17を知るその1
C++17を知るその2
C++17を知るその3
C++17を知るその4
C++17を知るその5
C++17を知るその6

About the author

naito06

C++やったり、PythonやったりPHPだったり。

Add Comment

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

By naito06

最近の投稿

アーカイブ

カテゴリー

タグクラウド

コーポレートサイト