最終更新日時:
が更新

履歴 編集

function
<stack>

std::stack::コンストラクタ

explicit stack(const Container& cont = Container());  // (1) C++03まで
explicit stack(Container&& cont = Container());       // (2) C++11
explicit stack(const Container& cont);                // (3) C++11

stack(const stack& st);                               // (4)
stack(stack&& st);                                    // (5) C++11

template <class Allocator>
explicit stack(const Allocator& alloc);               // (6) C++11

template <class Allocator>
stack(const Container& cont, const Allocator& alloc); // (7) C++11

template <class Allocator>
stack(Container&& cont, const Allocator& alloc);      // (8) C++11

template <class Allocator>
stack(const stack& st, const Allocator& alloc);       // (9) C++11

template <class Allocator>
stack(stack&& st, const Allocator& alloc);            // (10) C++11

概要

  • (1) : デフォルトコンストラクタ。元となるコンテナのコピーを受け取る。
  • (2) : デフォルトコンストラクタ。元となるコンテナの一時オブジェクトをムーブで受け取る。
  • (3) : 元となるコンテナのコピーを受け取るコンストラクタ。
  • (4) : コピーコンストラクタ。
  • (5) : ムーブコンストラクタ。
  • (6) : アロケータを受け取るコンストラクタ。
  • (7) : 元となるコンテナのコピーとアロケータを受け取るコンストラクタ。
  • (8) : 元となるコンテナの一時オブジェクトとアロケータを受け取るコンストラクタ。
  • (9) : アロケータを受け取るコピーコンストラクタ。
  • (10) : アロケータを受け取るムーブコンストラクタ。

効果

  • (2) : メンバ変数cstd::move(cont)で初期化する。
  • (3) : メンバ変数ccontのコピーで初期化する。
  • (6) : メンバ変数cのメモリアロケートにallocを使用する。
  • (7) : メンバ変数cContainer(cont, alloc)で初期化する。
  • (8) : メンバ変数cContainer(std::move(cont), alloc)で初期化する。
  • (9) : メンバ変数cContainer(st.c, alloc)で初期化する。
  • (10) : メンバ変数cContainer(std::move(st.c), alloc)で初期化する。

#include <iostream>
#include <utility>
#include <vector>
#include <stack>

int main()
{
  // デフォルトでは Container == deque<T>
  std::vector<int> v;

  // 要素を追加
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);

  // vec を引数に構築
  std::stack<int, std::vector<int>> st(std::move(v));

  while (!st.empty()) {
    std::cout << st.top() << " "; // 末尾要素を参照する
    st.pop(); // 末尾要素を削除
  }
}

出力

3 2 1 

参照

operator= 代入