最終更新日時(UTC):
が更新

履歴 編集

function template
<queue>

std::queue::emplace(C++11)

template <class... Args>
void emplace(Args&&... args);               // C++14 まで

template <class... Args>
decltype(auto) emplace(Args&&... args);     // C++17 から

概要

要素型 value_type のコンストラクタ引数をとり、直接構築でキューに要素を追加する。

効果

  • C++14 まで

    c.emplace_back(std::forward<Args>(args)...);
    

  • C++17 から

    return c.emplace_back(std::forward<Args>(args)...);
    

戻り値

  • C++14 まで:なし
  • C++17 から:構築した要素への参照

#include <iostream>
#include <queue>
#include <string>
#include <utility>

int main()
{
  std::queue<std::pair<int, std::string>> que;

  que.emplace(3, "aaa");
  que.emplace(1, "bbb");
  que.emplace(4, "ccc");

  while (!que.empty()) {
    std::cout << que.front().first << ", " << que.front().second << std::endl;
    que.pop();
  }
}

出力

3, aaa
1, bbb
4, ccc

バージョン

言語

  • C++11

処理系

備考

C++17 規格が発行された段階では戻り値型が reference に変更されていたが、そうしてしまうと emplace_back が参照を返さないコンテナと共に使用している既存のコードを破壊してしまうため、規格の誤りとして戻り値型が更に decltype(auto) に変更された。

関連項目

名前 説明
push 要素を追加する

参照