Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

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

      [edit template]
       
       
       
      std::vector
      Member types
      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++20)

      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)....

      If after the operation the newsize() is greater than oldcapacity() a reallocation takes place, in which case all iterators (including theend() iterator) and all references to the elements are invalidated. Otherwise only theend() iterator is invalidated.

      Contents

      [edit]Parameters

      args - arguments to forward to the constructor of the element
      Type requirements
      -
      If any of the following conditions is satisfied, the behavior is undefined:

      [edit]Return value

      (none)

      (until C++17)

      A reference to the inserted element.

      (since C++17)

      [edit]Complexity

      Amortized constant.

      [edit]Exceptions

      If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).If the move constructor ofT is notnoexcept and is notCopyInsertable into*this,vector will use the throwing move constructor. If it throws, the guarantee is waived and the effects are unspecified.

      Notes

      Since reallocation may take place,emplace_back requires the element type to beMoveInsertable forvector.

      [edit]Example

      The following code usesemplace_back to append an object of typePresident to astd::vector. 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 <vector>#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::vector<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::vector<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/vector/emplace_back&oldid=124989"

      [8]ページ先頭

      ©2009-2025 Movatter.jp