C++のアルゴリズムライブラリは、コンテナやシーケンスに対してさまざまなアルゴリズム操作を実行するための関数群を提供します。アルゴリズムライブラリを利用することで、頻繁に必要とされる処理を自分で実装する必要がなくなり、コードの簡潔化と保守性向上ができます。
アルゴリズムライブラリには多数のアルゴリズムが用意されており、それらを組み合わせることで複雑な処理も簡潔に記述することができます。アルゴリズムを選択する際には、処理の内容だけでなく、計算量やアルゴリズムの振る舞い (安定ソートかどうかなど) も考慮することが重要です。
ヘッダー一覧
編集この章で扱うヘッダーファイルは以下の通りです。
アルゴリズムの要件
編集並列アルゴリズム
編集アルゴリズムの結果の型
編集非破壊的シーケンス操作
編集破壊的シーケンス操作
編集ソートと関連操作
編集一般化された数値操作
編集27.11 特殊化された <memory> アルゴリズム
編集この節では、メモリ操作に関連するいくつかの特殊化された <memory> アルゴリズムについて説明されています。
27.11.2 特別なメモリコンセプト
編集この小節では、いくつかの特別なメモリ操作のための概念が導入されています。
nothrow-input-iterator
nothrow-forward-iterator
nothrow-sentinel-for
nothrow-input-range
nothrow-forward-range
これらの概念は、メモリ操作中に例外が送出されないことを要求するイテレータやレンジに対して使用されます。
27.11.3 アンロールされた操作
編集この小節では、メモリ操作に関連するいくつかのアンロールされた演算が定義されています。
uninitialized_default_construct
uninitialized_default_construct_n
uninitialized_value_construct
uninitialized_value_construct_n
uninitialized_copy
uninitialized_copy_n
uninitialized_move
uninitialized_move_n
uninitialized_fill
uninitialized_fill_n
これらの関数は、メモリ領域上で初期化されていないオブジェクトの構築、コピー、ムーブ、値設定を行います。一部の関数には、例外を投げないバージョンも用意されています。
ranges
名前空間にも、それぞれのアルゴリズムのレンジバージョンが定義されています。
27.11.8 construct_at
編集construct_at
関数テンプレートは、与えられたメモリ位置に置かれるオブジェクトを構築します。
template<class T, class... Args> constexpr T* construct_at(T* location, Args&&... args);
27.11.9 destroy
編集destroy
関数テンプレートは、与えられたメモリ位置に置かれたオブジェクトを破棄します。
template<class T> constexpr void destroy_at(T* location); template<class NoThrowForwardIterator> constexpr void destroy(NoThrowForwardIterator first, NoThrowForwardIterator last); template<class NoThrowForwardIterator, class Size> constexpr NoThrowForwardIterator destroy_n(NoThrowForwardIterator first, Size n);
ranges
名前空間にも、それぞれのバージョンが定義されています。
この節では、メモリ操作に特化した様々なアルゴリズムやユーティリティが提供されていることがわかります。これらを使用することで、メモリ領域上での効率的な初期化、構築、破棄などの操作が可能になります。