std::stack<T,Container>::stack - cppreference.com
提供: cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
|
|
(1) | (C++11以上) |
| (2) | ||
|
|
(C++11未満) | |
|
|
(C++11以上) | |
|
|
(3) | (C++11以上) |
|
|
(4) | |
|
|
(5) | (C++11以上) |
|
|
(6) | (C++11以上) |
|
|
(7) | (C++11以上) |
|
|
(8) | (C++11以上) |
|
|
(9) | (C++11以上) |
|
|
(10) | (C++11以上) |
様々なデータソースから新しいコンテナアダプタのベースとなるコンテナを構築します。
1) デフォルトコンストラクタ。 コンテナを値初期化します。
2) ベースとなるコンテナ c を cont の内容からコピー構築します。 これはデフォルトコンストラクタでもあります (C++11未満)
3) ベースとなるコンテナ c を std::move(cont) からムーブ構築します。
4) コピーコンストラクタ。 アダプタは other.c の内容からコピー構築されます。 (暗黙に宣言)
5) ムーブコンストラクタ。 アダプタは std::move(other.c) から構築されます。 (暗黙に宣言)
6-10) 以下のコンストラクタは std::uses_allocator<container_type, Alloc>::value == true、つまりベースとなるコンテナがアロケータ対応コンテナの場合のみ定義されます (stack と共に使用できる標準ライブラリのコンテナはすべて対応しています)。
6) c(alloc) によって行われるかのように、 alloc をアロケータとして使用してベースとなるコンテナを構築します。
7) c(cont, alloc) によって行われるかのように、 alloc をアロケータとして使用して cont の内容からベースとなるコンテナを構築します。
8) c(std::move(cont), alloc) によって行われるかのように、 alloc をアロケータとして使用して cont の内容からムーブセマンティクスを用いてベースとなるコンテナを構築します。
9) c(other.c, alloc) によって行われるかのように、 alloc をアロケータとして使用して other.c の内容からアダプタを構築します。
10) c(std::move(other.c), alloc) によって行われるかのように、 alloc をアロケータとして使用して other の内容からムーブセマンティクスを用いてベースとなるコンテナを構築します。
引数
| alloc | - | ベースとなるコンテナのすべてのメモリ確保のために使用するアロケータ |
| other | - | ベースとなるコンテナを初期化するためにソースとして使用される別のコンテナアダプタ |
| cont | - | ベースとなるコンテナを初期化するためにソースとして使用されるコンテナ |
| first, last | - | 初期化に使用する要素の範囲 |
| 型の要件 | ||
-Alloc は Allocator の要件を満たさなければなりません。
| ||
-Container は Container の要件を満たさなければなりません。 コンストラクタ (5-10) は Container が AllocatorAwareContainer の要件を満たす場合にのみ定義されます
| ||
-InputIt は LegacyInputIterator の要件を満たさなければなりません。
| ||
計算量
ラップされているコンテナの対応する操作と同じです。
欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
| DR | 適用先 | 発行時の動作 | 正しい動作 |
|---|---|---|---|
| P0935R0 | C++11 | default constructor was explicit | made implicit |
例
#include <stack> #include <deque> #include <iostream> int main() { std::stack<int> c1; c1.push(5); std::cout << c1.size() << '\n'; std::stack<int> c2(c1); std::cout << c2.size() << '\n'; std::deque<int> deq {3, 1, 4, 1, 5}; std::stack<int> c3(deq); std::cout << c3.size() << '\n'; }
出力: