diff --git a/guide.md b/guide.md new file mode 100644 index 0000000000..346ef1863d --- /dev/null +++ b/guide.md @@ -0,0 +1,30 @@ +# 概念・前提知識ガイド + +ここでは、リファレンスを読み解くための前提知識を解説する。 + + +## データ構造 +- [コンテナとは](guide/container.md) +- [イテレータとは](guide/iterator.md.nolink) +- [レンジとは](guide/range.md.nolink) +- [各種コンテナの特徴比較](guide/container_comparison.md.nolink) +- [データ構造とアルゴリズムの設計](guide/data_structure_and_algorithm.md.nolink) + + +## 並行・並列 +- [スレッド同期プリミティブの概要一覧](guide/thread_sync_primitives.md.nolink) +- [実行制御ライブラリの概要](guide/execution.md.nolink) + + +## 入出力 +- [ストリーム関連ヘッダ・クラスの関係](guide/stream_classes.md.nolink) + + +## 運営方針 +guide階層にあるページは、以下の方針のもとに執筆している。 + +- リファレンスを読み解くための前提知識を提供する + - 個別のリファレンスページでは、その機能の仕様を解説する。そこで前提となる概念、複数の機能にまたがる関係、機能の選び方をここで解説する + - リファレンスの各ページからは、概要の下に「概念・前提知識」セクションを設けて、この階層のページへのリンクを列挙する +- 新しいページを作る際は、まずGitHub Issueで相談する + - 無秩序に増えるとメンテナンスがむずかしくなるため、対象範囲と分類を相談してから執筆する diff --git a/guide/container.md b/guide/container.md new file mode 100644 index 0000000000..143ecd0ffd --- /dev/null +++ b/guide/container.md @@ -0,0 +1,207 @@ +# コンテナとは + +## 概要 +「コンテナ (container)」とは、C++標準ライブラリにおけるデータ構造の名称である。要素となるオブジェクトを保持し、その追加・参照・削除・列挙といった操作を提供する。どの操作を提供するかは、コンテナの種類によって異なる。 + +標準ライブラリのコンテナは、要素をどのように保持し、どのように目的の要素を見つけるかによって、シーケンスコンテナ・連想コンテナ・コンテナアダプタに分類される。どのコンテナも要素を所有し、コンテナを破棄すると保持している要素も破棄される。 + +なお、[`std::span`](/reference/span/span.md)や[`std::mdspan`](/reference/mdspan/mdspan.md)は、ほかの場所にある要素列を参照するだけで要素を所有しないため、コンテナではない。また[`std::basic_string`](/reference/string/basic_string.md)は文字のシーケンスを保持し、シーケンスコンテナと同様に扱えるが、文字列を扱うクラスとして別に規定されている。 + + +### シーケンスコンテナ +「シーケンスコンテナ (sequence container)」は、要素を一列に並べて保持する。要素を追加する位置を指定でき、要素の並び順はその位置によって決まる。 + +| 名前 | 説明 | 対応バージョン | +|------------------------------------------------------------------|------------------------------------|----------------| +| [`array`](/reference/array/array.md) | 固定長の配列 | C++11 | +| [`vector`](/reference/vector/vector.md) | 可変長の配列 | | +| [`inplace_vector`](/reference/inplace_vector/inplace_vector.md) | 容量が固定された可変長の配列 | C++26 | +| [`deque`](/reference/deque/deque.md) | 両端キュー | | +| [`list`](/reference/list/list.md) | 双方向リンクリスト | | +| [`forward_list`](/reference/forward_list/forward_list.md) | 単方向リンクリスト | C++11 | +| [`hive`](/reference/hive/hive.md) | 要素のメモリ位置が安定したコンテナ | C++26 | + +ただし[`std::array`](/reference/array/array.md)は要素数が固定されており、要素の追加・削除を行えない。[`std::hive`](/reference/hive/hive.md)は挿入位置をコンテナが決定するため、要素の順序は未規定である。 + + +### 連想コンテナ +「連想コンテナ (associative container)」は、キーから要素を探せるように要素を保持する。キーの比較によって順序付けて保持するものと、キーのハッシュ値によって分類して保持するもの (非順序連想コンテナ) がある。 + +| 名前 | 説明 | 対応バージョン | +|-------------------------------------------------------------------------|----------------------------------------|----------------| +| [`map`](/reference/map/map.md) | 順序付き連想配列 | | +| [`multimap`](/reference/map/multimap.md) | キーの重複を許す順序付き連想配列 | | +| [`set`](/reference/set/set.md) | 順序付き集合 | | +| [`multiset`](/reference/set/multiset.md) | 要素の重複を許す順序付き集合 | | +| [`unordered_map`](/reference/unordered_map/unordered_map.md) | 非順序連想配列 | C++11 | +| [`unordered_multimap`](/reference/unordered_map/unordered_multimap.md) | キーの重複を許す非順序連想配列 | C++11 | +| [`unordered_set`](/reference/unordered_set/unordered_set.md) | 非順序集合 | C++11 | +| [`unordered_multiset`](/reference/unordered_set/unordered_multiset.md) | 要素の重複を許す非順序集合 | C++11 | + +連想配列はキーと値の組を要素として保持し、集合はキーそのものを要素として保持する。 + + +### コンテナアダプタ +「コンテナアダプタ (container adaptor)」は、ほかのコンテナを内部に保持し、それを別のデータ構造として見せる。 + +| 名前 | 説明 | 対応バージョン | +|---------------------------------------------------------------|--------------------------------------------------------|----------------| +| [`stack`](/reference/stack/stack.md) | LIFOスタック | | +| [`queue`](/reference/queue/queue.md) | FIFOキュー | | +| [`priority_queue`](/reference/queue/priority_queue.md) | 優先順位付きキュー | | +| [`flat_map`](/reference/flat_map/flat_map.md) | ソート済みのシーケンスによる順序付き連想配列 | C++23 | +| [`flat_multimap`](/reference/flat_map/flat_multimap.md) | ソート済みのシーケンスによるキーの重複を許す順序付き連想配列 | C++23 | +| [`flat_set`](/reference/flat_set/flat_set.md) | ソート済みのシーケンスによる順序付き集合 | C++23 | +| [`flat_multiset`](/reference/flat_set/flat_multiset.md) | ソート済みのシーケンスによる要素の重複を許す順序付き集合 | C++23 | + +[`std::stack`](/reference/stack/stack.md)・[`std::queue`](/reference/queue/queue.md)・[`std::priority_queue`](/reference/queue/priority_queue.md)は、提供する操作を限定することで用途を明確にする。そのため、これらのコンテナは要素を列挙する操作を提供しない。`flat_`で始まるコンテナは、ソート済みのシーケンスを内部に保持することで、連想コンテナと同じ操作を提供する。 + + +## 例 +ここでは、シーケンスコンテナと連想コンテナを例として、基本的な操作を示す。 + +### 要素を追加する +シーケンスコンテナは要素を追加する位置を指定し、連想配列はキーと値の組を追加する。どちらも、範囲for文で全要素を列挙できる。 + +```cpp example +#include +#include +#include +#include + +int main() +{ + // シーケンスコンテナ : 末尾に要素を追加する + std::vector v; + v.push_back(1); + v.push_back(3); + + // シーケンスコンテナ : 位置を指定して要素を挿入する + // ここでは、先頭から1要素進んだ位置に2を挿入する + v.insert(v.begin() + 1, 2); + + for (int x : v) { + std::cout << x << std::endl; + } + + // 連想コンテナ : キーと値の組を追加する + std::map m; + m.insert({"one", 1}); + m["two"] = 2; + + for (const auto& [key, value] : m) { + std::cout << key << " : " << value << std::endl; + } +} +``` +* v.push_back[link /reference/vector/vector/push_back.md] +* v.insert[link /reference/vector/vector/insert.md] +* m.insert[link /reference/map/map/insert.md] +* m["two"][link /reference/map/map/op_at.md] + +#### 出力 +``` +1 +2 +3 +one : 1 +two : 2 +``` + +[`std::map`](/reference/map/map.md)は、キーの順序で要素を保持するため、列挙する順序は追加した順序ではなくキーの昇順となる。 + + +### 要素を参照する +要素を参照する方法は、コンテナがどのように要素を保持しているかによって異なる。 + +```cpp example +#include +#include +#include +#include +#include +#include + +int main() +{ + std::vector v = {1, 2, 3}; + std::list ls = {1, 2, 3}; + std::map m = {{"one", 1}, {"two", 2}}; + + // vectorは、位置を添字で指定して参照できる + std::cout << v[1] << std::endl; + + // listは添字で指定できないため、イテレータを進めて位置を指定する + std::cout << *std::next(ls.begin(), 1) << std::endl; + + // mapは、キーを指定して値を参照する + std::cout << m.at("two") << std::endl; +} +``` +* v[1][link /reference/vector/vector/op_at.md] +* ls.begin()[link /reference/list/list/begin.md] +* m.at[link /reference/map/map/at.md] + +#### 出力 +``` +2 +2 +2 +``` + +[`std::vector`](/reference/vector/vector.md)は要素を連続した領域に並べて保持するため、どの位置の要素も定数時間で参照できる。[`std::list`](/reference/list/list.md)は要素どうしをリンクでつないで保持するため、先頭から順にイテレータを進める必要があり、位置に比例した時間がかかる。 + + +### 要素を削除する +シーケンスコンテナは削除する要素の位置をイテレータで指定し、連想コンテナはキーを指定できる。 + +```cpp example +#include +#include +#include +#include +#include +#include + +int main() +{ + std::vector v = {1, 2, 3}; + std::list ls = {1, 2, 3}; + std::map m = {{"one", 1}, {"two", 2}}; + + // シーケンスコンテナは、削除する要素の位置をイテレータで指定する + v.erase(v.begin() + 1); + ls.erase(std::next(ls.begin(), 1)); + + // 連想コンテナは、削除する要素のキーを指定できる + m.erase("two"); + + for (int x : v) { + std::cout << x << std::endl; + } + for (int x : ls) { + std::cout << x << std::endl; + } + for (const auto& [key, value] : m) { + std::cout << key << " : " << value << std::endl; + } +} +``` +* v.erase[link /reference/vector/vector/erase.md] +* ls.erase[link /reference/list/list/erase.md] +* ls.begin()[link /reference/list/list/begin.md] +* m.erase[link /reference/map/map/erase.md] + +#### 出力 +``` +1 +3 +1 +3 +one : 1 +``` + + +## 関連項目 +- [イテレータとは](iterator.md.nolink) +- [各種コンテナの特徴比較](container_comparison.md.nolink) diff --git a/reference/array/array.md b/reference/array/array.md index e6c0e0a82f..adeca52857 100644 --- a/reference/array/array.md +++ b/reference/array/array.md @@ -22,6 +22,10 @@ namespace std { - `N` : 配列の要素数。`0`以上であること +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/破棄 diff --git a/reference/deque/deque.md b/reference/deque/deque.md index 3784fd2cf1..8903691832 100644 --- a/reference/deque/deque.md +++ b/reference/deque/deque.md @@ -39,6 +39,10 @@ namespace std { - `Allocator` : ストレージの割り当てモデルを定義するために使用されるアロケータオブジェクトの型。デフォルトでは、値に依存しない単純なメモリ割り当てモデルを定義する、型 `T` の [`allocator`](/reference/memory/allocator.md) クラステンプレートが使われる。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/flat_map/flat_map.md b/reference/flat_map/flat_map.md index 58963ee875..5e7bd06ad7 100644 --- a/reference/flat_map/flat_map.md +++ b/reference/flat_map/flat_map.md @@ -51,6 +51,10 @@ namespace std { - 値の配列内のオフセット`off`の値は、キー配列内のオフセット`off`のキーに関連付けられた値である +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ制約 - `KeyContainer`と`MappedContainer`に指定するコンテナ型は、 - シーケンスコンテナの要件を満たし、 diff --git a/reference/flat_map/flat_multimap.md b/reference/flat_map/flat_multimap.md index 62cbac8abe..7f07a143ee 100644 --- a/reference/flat_map/flat_multimap.md +++ b/reference/flat_map/flat_multimap.md @@ -51,6 +51,10 @@ namespace std { - 値の配列内のオフセット`off`の値は、キー配列内のオフセット`off`のキーに関連付けられた値である +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ制約 - `KeyContainer`と`MappedContainer`に指定するコンテナ型は、 - シーケンスコンテナの要件を満たし、 diff --git a/reference/flat_set/flat_multiset.md b/reference/flat_set/flat_multiset.md index 11952833d2..5839d8d0a6 100644 --- a/reference/flat_set/flat_multiset.md +++ b/reference/flat_set/flat_multiset.md @@ -40,6 +40,10 @@ namespace std { また、このコンテナはメモリアロケータを指定できない設計にもなっている。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ制約 - `KeyContainer`に指定するコンテナ型は、 - シーケンスコンテナの要件を満たし、 diff --git a/reference/flat_set/flat_set.md b/reference/flat_set/flat_set.md index 550ae9e669..eb144f11c4 100644 --- a/reference/flat_set/flat_set.md +++ b/reference/flat_set/flat_set.md @@ -40,6 +40,10 @@ namespace std { また、このコンテナはメモリアロケータを指定できない設計にもなっている。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ制約 - `KeyContainer`に指定するコンテナ型は、 - シーケンスコンテナの要件を満たし、 diff --git a/reference/forward_list/forward_list.md b/reference/forward_list/forward_list.md index 93623b97a5..2f6936fff5 100644 --- a/reference/forward_list/forward_list.md +++ b/reference/forward_list/forward_list.md @@ -39,6 +39,10 @@ namespace std { - `Allocator`: メモリ確保に使用されるアロケータの型。無指定の場合は標準の[`allocator`](/reference/memory/allocator.md)クラスが使用される。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/hive/hive.md b/reference/hive/hive.md index 036683c8a9..f4cbf5ee38 100644 --- a/reference/hive/hive.md +++ b/reference/hive/hive.md @@ -31,6 +31,10 @@ namespace std { - `Allocator`: メモリ確保に使用されるアロケータの型。デフォルトでは標準の[`std::allocator`](/reference/memory/allocator.md)クラスが使用される。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## この機能が必要になった背景・経緯 ゲーム開発やシミュレーション、GUIなどの分野では、多数のオブジェクトを頻繁に生成・破棄しながら、それらのオブジェクトを互いにポインタや参照で参照し合うことが多い。このような用途では、次の性質を同時に満たすコンテナが求められる。 diff --git a/reference/inplace_vector/inplace_vector.md b/reference/inplace_vector/inplace_vector.md index 3c063ce186..ce6c96e3f1 100644 --- a/reference/inplace_vector/inplace_vector.md +++ b/reference/inplace_vector/inplace_vector.md @@ -57,6 +57,10 @@ std::inplace_vector iv = {1, 2, 3}; // OK: 明示的に型と容量を ``` +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築・破棄 diff --git a/reference/list/list.md b/reference/list/list.md index 70a60591c3..32b8804f06 100644 --- a/reference/list/list.md +++ b/reference/list/list.md @@ -28,6 +28,10 @@ namespace std { - `Allocator`: メモリ確保に使用されるアロケータの型。デフォルトでは標準の[`allocator`](/reference/memory/allocator.md)クラスが使用される。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/map/map.md b/reference/map/map.md index 9a877b443c..04a6445a15 100644 --- a/reference/map/map.md +++ b/reference/map/map.md @@ -41,6 +41,10 @@ namespace std { このコンテナクラスは、双方向イテレータをサポートする。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ - `Key`: キーの型。キーの値の大小に従って自動的に並び替えられる。 - `T`: 値の型。 diff --git a/reference/map/multimap.md b/reference/map/multimap.md index 3fc62f84c5..5633a2d38b 100644 --- a/reference/map/multimap.md +++ b/reference/map/multimap.md @@ -42,6 +42,10 @@ namespace std { このコンテナクラスは、双方向イテレータをサポートする。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ - `Key`: キーの型。キーの値の大小に従って自動的に並び替えられる。 - `T`: 値の型。 diff --git a/reference/queue/priority_queue.md b/reference/queue/priority_queue.md index bfba8da76a..8fe2298d24 100644 --- a/reference/queue/priority_queue.md +++ b/reference/queue/priority_queue.md @@ -38,6 +38,10 @@ namespace std { 以下のリファレンス中では、テンプレート引数として同じ名前を用いる。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## 適格要件 `T`が`Container::value_type`と同じ型であること。 diff --git a/reference/queue/queue.md b/reference/queue/queue.md index 346764224f..d74893664c 100644 --- a/reference/queue/queue.md +++ b/reference/queue/queue.md @@ -34,6 +34,10 @@ namespace std { 以下のリファレンス中では、テンプレート引数として同じ名前を用いる。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## 適格要件 `T`が`Container::value_type`と同じ型であること。 diff --git a/reference/set/multiset.md b/reference/set/multiset.md index 011e9fe94d..fefd6d5fb8 100644 --- a/reference/set/multiset.md +++ b/reference/set/multiset.md @@ -34,6 +34,10 @@ namespace std { このコンテナクラスは、双方向イテレータをサポートする。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ - `Key`: キーの型。このコンテナに格納されれる要素の型。`multiset` に格納される要素はそれぞれはキーでもある。 - `Compare`: 比較クラス。このクラスは 2 つの引数(同じ型であり、コンテナの要素型でもある)をとり `bool` 値を返す。[狭義の弱順序](/reference/algorithm.md#strict-weak-ordering)において `a` が `b` よりも前の場所に位置づけられる場合に `true` である。これはクラスが関数呼び出しオブジェクトを実装したクラスであっても良いし関数ポインタであっても良い(例は コンストラクタ を参照)。これは、`operator<()` を適用( `a < b` )したときと同じ値を返す [`less`](/reference/functional/less.md)`` がデフォルトである。 diff --git a/reference/set/set.md b/reference/set/set.md index 505e6e8261..fdbfb9f47e 100644 --- a/reference/set/set.md +++ b/reference/set/set.md @@ -35,6 +35,10 @@ namespace std { このコンテナクラスは、双方向イテレータをサポートする。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ - `Key`: キーの型。このコンテナに格納されれる要素の型。`set` に格納される要素はそれぞれはキーでもある。 - `Compare`: 比較クラス。このクラスは 2 つの引数(同じ型であり、コンテナの要素型でもある)をとり `bool` 値を返す。[狭義の弱順序](/reference/algorithm.md#strict-weak-ordering)において `a` が `b` よりも前の場所に位置づけられる場合に `true` である。これはクラスが関数呼び出しオブジェクトを実装したクラスであっても良いし関数ポインタであっても良い(例は コンストラクタ を参照)。これは、`operator<()` を適用( `a < b` )したときと同じ値を返す [`less`](/reference/functional/less.md)`` がデフォルトである。 diff --git a/reference/stack/stack.md b/reference/stack/stack.md index c8cc57b01d..dfda54102c 100644 --- a/reference/stack/stack.md +++ b/reference/stack/stack.md @@ -30,6 +30,10 @@ namespace std { - `Container`: 要素へのアクセス・保存に用いる内部実装のコンテナクラス +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## 適格要件 `T`が`Container::value_type`と同じ型であること。 diff --git a/reference/unordered_map/unordered_map.md b/reference/unordered_map/unordered_map.md index 5577538824..8c88295ab7 100644 --- a/reference/unordered_map/unordered_map.md +++ b/reference/unordered_map/unordered_map.md @@ -58,6 +58,10 @@ namespace std { テンプレートパラメータ `Allocator` は、Allocator requirements を満たさなければならない。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/unordered_map/unordered_multimap.md b/reference/unordered_map/unordered_multimap.md index e65fb5be3b..f473e6b409 100644 --- a/reference/unordered_map/unordered_multimap.md +++ b/reference/unordered_map/unordered_multimap.md @@ -58,6 +58,10 @@ namespace std { テンプレートパラメータ `Allocator` は、Allocator requirements を満たさなければならない。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/unordered_set/unordered_multiset.md b/reference/unordered_set/unordered_multiset.md index 3d6e529e17..0fa1350969 100644 --- a/reference/unordered_set/unordered_multiset.md +++ b/reference/unordered_set/unordered_multiset.md @@ -55,6 +55,10 @@ namespace std { テンプレートパラメータ `Allocator` は、Allocator requirements を満たさなければならない。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/unordered_set/unordered_set.md b/reference/unordered_set/unordered_set.md index 5780a26f71..df2f50ba78 100644 --- a/reference/unordered_set/unordered_set.md +++ b/reference/unordered_set/unordered_set.md @@ -54,6 +54,10 @@ namespace std { テンプレートパラメータ `Allocator` は、Allocator requirements を満たさなければならない。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築/コピー/破棄 diff --git a/reference/vector/vector.md b/reference/vector/vector.md index fd64f2103f..43005d3ce3 100644 --- a/reference/vector/vector.md +++ b/reference/vector/vector.md @@ -47,6 +47,10 @@ namespace std { リファレンス中では、これらの名前をテンプレートパラメータとして扱う。 +## 概念・前提知識 +- [コンテナとは](/guide/container.md) + + ## メンバ関数 ### 構築・破棄 diff --git a/start_editing.md b/start_editing.md index 513451a313..512151b1f8 100644 --- a/start_editing.md +++ b/start_editing.md @@ -118,6 +118,7 @@ Markdown形式では、HTMLのタグも併用できますが、cpprefjpサイト - [名前付き要件の雛形](/start_editing/named_requirement_template_page.md) - [比較演算子の雛形](/start_editing/comparison_operator_template_page.md) - [CPOの雛形](/start_editing/cpo_template_page.md) +- [ガイドの雛形](/start_editing/guide_template_page.md) また、リポジトリのトップディレクトリに`GLOBAL_QUALIFY_LIST.txt`というファイルがあります。サイト全体のコードブロックに対して適用したい識別子の修飾があれば、ここに列挙していきます。書き方は各雛形ページに書いてあるコードブロックの修飾と同じです。 @@ -229,6 +230,7 @@ Pull Requestのレビューが滞っていた場合、Pull Requestの提出者 - [名前付き要件の雛形](/start_editing/named_requirement_template_page.md) - [比較演算子の雛形](/start_editing/comparison_operator_template_page.md) - [CPOの雛形](/start_editing/cpo_template_page.md) +- [ガイドの雛形](/start_editing/guide_template_page.md) ### サンプルコードを追加する (難易度★★★★) diff --git a/start_editing/class_template_page.md b/start_editing/class_template_page.md index aa2c99c076..a12ba40481 100644 --- a/start_editing/class_template_page.md +++ b/start_editing/class_template_page.md @@ -55,6 +55,12 @@ namespace std { (必要な項目を省略する場合には、「(執筆中)」と書いておいてください。) +## 概念・前提知識 +(ここには、このクラスを理解するための前提知識となる、[guide階層](/guide.md)のページへのリンクを列挙します。とくに必要がないと判断した場合、項目を削除してください。) + +- [コンテナとは](/guide/container.md) + + ## テンプレートパラメータ制約 (ここには、クラスのテンプレートパラメータに対する制約を記載します。SFINAE-friendlyな関数の条件、制約テンプレートによる条件などを記載します。) diff --git a/start_editing/guide_template_page.md b/start_editing/guide_template_page.md new file mode 100644 index 0000000000..e023da593b --- /dev/null +++ b/start_editing/guide_template_page.md @@ -0,0 +1,53 @@ +# page_title (1行目の見出し1はページのタイトルです。修飾なしで記載してください) + +([cpprefjpを編集するには](/start_editing.md) および [cpprefjpでのMarkdown記法の制限と拡張](markdown_cpprefjp.md) を先に読んで下さい。) + +( + guide階層のページは、リファレンスを読み解くための前提知識を解説します。 + 個別の機能の仕様はリファレンスページに記載し、ここでは複数のページにまたがる概念、機能同士の関係、機能の選び方を解説します。 + 新しいページを作る際は、まずGitHub Issueで相談してください。 +) + + + + +## 概要 +(ここには、解説する概念の説明を記述します。必須事項です。) + +(その概念がC++標準ライブラリにおいて何を指すのかを、記述してください。) + + +## 例 +(ここには、その概念を理解するためのサンプルコードを記述します。) + +### サンプルコード名 +```cpp example +// (インクルードとmain()関数を含む、実行可能なサンプルコードを記述してください。そのようなコードブロックにはexampleタグを付けます。) +// (demonstrateに必要な最小の要素のみを含めてください。) + +#include + +int main() +{ + int variable = 0; + std::cout << variable << std::endl; +} +``` +* variable[color ff0000] + +#### 出力 +``` +0 +``` + +(実行結果が処理系・実行環境によって異なる場合は、項目名を「出力例」に変更し、可能であればその理由も併記してください。) + + +## 関連項目 +(ここには、その概念と関連のあるcpprefjpサイト内の項目へのリンクを記述します。guide階層のほかのページや、代表的なリファレンスページへのリンクを記載します。) + +- [ガイド](/guide.md) + + +## 参照 +(ここには、その概念を理解するにあたっての参考資料へのリンクを記述します。とくに必要がないと判断した場合、項目を削除してください。)