名前空間
変種
操作

std::stack::stack

提供: cppreference.com
< cpp‎ | container‎ | stack
stack() : stack(Container()) { }
(1) (C++11およびそれ以降)
(2)
explicit stack( const Container& cont = Container() );
(C++11以前)
explicit stack( const Container& cont );
(C++11およびそれ以降)
explicit stack( Container&& cont );
(3) (C++11およびそれ以降)
stack( const stack& other );
(4)
stack( stack&& other );
(5) (C++11およびそれ以降)
template< class Alloc >
explicit stack( const Alloc& alloc );
(6) (C++11およびそれ以降)
template< class Alloc >
stack( const Container& cont, const Alloc& alloc );
(7) (C++11およびそれ以降)
template< class Alloc >
stack( Container&& cont, const Alloc& alloc );
(8) (C++11およびそれ以降)
template< class Alloc >
stack( const stack& other, const Alloc& alloc );
(9) (C++11およびそれ以降)
template< class Alloc >
stack( stack&& other, const Alloc& alloc );
(10) (C++11およびそれ以降)

様々なデータソースから新しいコンテナアダプタのベースとなるコンテナを構築します。

1) デフォルトコンストラクタ。 コンテナを値初期化します。
2) ベースとなるコンテナ ccont の内容からコピー構築します。 これはデフォルトコンストラクタでもあります (C++11以前)
3) ベースとなるコンテナ cstd::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 - 初期化に使用する要素の範囲
型の要件
-
AllocAllocator の要件を満たさなければなりません。
-
ContainerContainer の要件を満たさなければなりません。 コンストラクタ (5-10) は ContainerAllocatorAwareContainer の要件を満たす場合にのみ定義されます
-
InputItInputIterator の要件を満たさなければなりません。

[編集] 計算量

ラップされているコンテナの対応する操作と同じです。

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された 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';
}

出力:

1
1
5

[編集] 関連項目

コンテナアダプタに値を代入します
(パブリックメンバ関数) [edit]