Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::list<T,Allocator>::emplace_back

      From cppreference.com
      <cpp‎ |container‎ |list

      [edit template]
       
       
       
      std::list
      Member functions
      Non-member functions
      (until C++20)(until C++20)(until C++20)(until C++20)(until C++20)
      Deduction guides(C++17)
       
      template<class...Args>
      void emplace_back( Args&&...args);
      (until C++17)
      template<class...Args>
      reference emplace_back( Args&&...args);
      (since C++17)
      (constexpr since C++26)

      Appends a new element to the end of the container. The element is constructed throughstd::allocator_traits::construct, which typically uses placementnew to construct the element in-place at the location provided by the container. The argumentsargs... are forwarded to the constructor asstd::forward<Args>(args)....

      No iterators or references are invalidated.

      Contents

      [edit]Parameters

      args - arguments to forward to the constructor of the element
      Type requirements
      -
      IfT is notEmplaceConstructible intolist fromargs..., the behavior is undefined.

      [edit]Return value

      (none)

      (until C++17)

      A reference to the inserted element.

      (since C++17)

      [edit]Complexity

      Constant.

      [edit]Exceptions

      If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).

      [edit]Example

      The following code usesemplace_back to append an object of typePresident to astd::list. It demonstrates howemplace_back forwards parameters to thePresident constructor and shows how usingemplace_back avoids the extra copy or move operation required when usingpush_back.

      Run this code
      #include <list>#include <cassert>#include <iostream>#include <string> struct President{std::string name;std::string country;int year;     President(std::string p_name,std::string p_country,int p_year): name(std::move(p_name)), country(std::move(p_country)), year(p_year){std::cout<<"I am being constructed.\n";}     President(President&& other): name(std::move(other.name)), country(std::move(other.country)), year(other.year){std::cout<<"I am being moved.\n";}     President& operator=(const President& other)=default;}; int main(){std::list<President> elections;std::cout<<"emplace_back:\n";auto& ref= elections.emplace_back("Nelson Mandela","South Africa",1994);assert(ref.year==1994&&"uses a reference to the created object (C++17)"); std::list<President> reElections;std::cout<<"\npush_back:\n";    reElections.push_back(President("Franklin Delano Roosevelt","the USA",1936)); std::cout<<"\nContents:\n";for(const President& president: elections)std::cout<< president.name<<" was elected president of "<< president.country<<" in "<< president.year<<".\n"; for(const President& president: reElections)std::cout<< president.name<<" was re-elected president of "<< president.country<<" in "<< president.year<<".\n";}

      Output:

      emplace_back:I am being constructed. push_back:I am being constructed.I am being moved. Contents:Nelson Mandela was elected president of South Africa in 1994.Franklin Delano Roosevelt was re-elected president of the USA in 1936.

      [edit]See also

      adds an element to the end
      (public member function)[edit]
      (C++11)
      constructs element in-place
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/list/emplace_back&oldid=124991"

      [8]ページ先頭

      ©2009-2025 Movatter.jp