Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::deque<T,Allocator>::deque

      From cppreference.com
      <cpp‎ |container‎ |deque
       
       
       
      std::deque
      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)
       
      deque(): deque(Allocator()){}
      (1)(since C++11)
      (constexpr since C++26)
      (2)
      explicit deque(const Allocator& alloc= Allocator());
      (until C++11)
      explicit deque(const Allocator& alloc);
      (since C++11)
      (constexpr since C++26)
      explicit deque( size_type count,
                     const Allocator& alloc= Allocator());
      (3)(since C++11)
      (constexpr since C++26)
      (4)
      explicit deque( size_type count,const T& value= T(),
                     const Allocator& alloc= Allocator());
      (until C++11)
      deque( size_type count,const T& value,
             const Allocator& alloc= Allocator());
      (since C++11)
      (constexpr since C++26)
      template<class InputIt>

      deque( InputIt first, InputIt last,

             const Allocator& alloc= Allocator());
      (5)(constexpr since C++26)
      template<container-compatible-range<T> R>

      deque(std::from_range_t, R&& rg,

             const Allocator& alloc= Allocator());
      (6)(since C++23)
      (constexpr since C++26)
      deque(const deque& other);
      (7)(constexpr since C++26)
      deque( deque&& other);
      (8)(since C++11)
      (constexpr since C++26)
      (9)
      deque(const deque& other,const Allocator& alloc);
      (since C++11)
      (until C++23)
      deque(const deque& other,
             conststd::type_identity_t<Allocator>& alloc);
      (since C++23)
      (constexpr since C++26)
      (10)
      deque( deque&& other,const Allocator& alloc);
      (since C++11)
      (until C++23)
      deque( deque&& other,conststd::type_identity_t<Allocator>& alloc);
      (since C++23)
      (constexpr since C++26)
      deque(std::initializer_list<T> init,
             const Allocator& alloc= Allocator());
      (11)(since C++11)
      (constexpr since C++26)

      Constructs a newdeque from a variety of data sources, optionally using a user supplied allocatoralloc.

      1) The default constructor since C++11. Constructs an emptydeque with a default-constructed allocator.
      IfAllocator is notDefaultConstructible, the behavior is undefined.
      2) The default constructor until C++11. Constructs an emptydeque with the given allocatoralloc.
      3) Constructs adeque withcount default-inserted objects ofT. No copies are made.
      IfT is notDefaultInsertable intodeque, the behavior is undefined.
      4) Constructs adeque withcount copies of elements with valuevalue.

      IfT is notCopyInsertable intodeque, the behavior is undefined.

      (since C++11)
      5) Constructs adeque with the contents of the range[firstlast). Each iterator in[firstlast) is dereferenced exactly once.

      IfInputIt does not satisfy the requirements ofLegacyInputIterator, overload(4) is called instead with argumentsstatic_cast<size_type>(first),last andalloc.

      (until C++11)

      This overload participates in overload resolution only ifInputIt satisfies the requirements ofLegacyInputIterator.

      IfT is notEmplaceConstructible intodeque from*first, the behavior is undefined.

      (since C++11)
      6) Constructs adeque with the contents of the rangerg. Each iterator inrg is dereferenced exactly once.
      IfT is notEmplaceConstructible intodeque from*ranges::begin(rg), the behavior is undefined.
      7) The copy constructor. Constructs adeque with the contents ofother.

      The allocator is obtained as if by calling
      std::allocator_traits<Allocator>::select_on_container_copy_construction
             (other.get_allocator())
      .

      (since C++11)
      8) The move constructor. Constructs adeque with the contents ofother. The allocator is obtained by move construction fromother.get_allocator().
      9) Same as the copy constructor, except thatalloc is used as the allocator.
      IfT is notCopyInsertable intodeque, the behavior is undefined.
      10) Same as the move constructor, except thatalloc is used as the allocator.
      IfT is notMoveInsertable intodeque, the behavior is undefined.
      11) Equivalent todeque(il.begin(), il.end(), alloc).

      Contents

      [edit]Parameters

      alloc - allocator to use for all memory allocations of this container
      count - the size of the container
      value - the value to initialize elements of the container with
      first, last - the pair of iterators defining the sourcerange of elements to copy
      other - another container to be used as source to initialize the elements of the container with
      init - initializer list to initialize the elements of the container with
      rg - a container compatible range

      [edit]Complexity

      1,2) Constant.
      3,4) Linear incount.
      5) Linear instd::distance(first, last).
      6) Linear inranges::distance(rg).
      7) Linear inother.size().
      8) Constant.
      9) Linear inother.size().
      10) Linear inother.size() ifalloc!= other.get_allocator(), otherwise constant.
      11) Linear ininit.size().

      [edit]Exceptions

      Calls toAllocator::allocate may throw.

      [edit]Notes

      After container move construction (overloads(8) and(10)), references, pointers, and iterators (other than the end iterator) toother remain valid, but refer to elements that are now in*this. The current standard makes this guarantee via the blanket statement in[container.reqmts]/67, and a more direct guarantee is under consideration viaLWG issue 2321.

      Feature-test macroValueStdFeature
      __cpp_lib_containers_ranges202202L(C++23)Ranges-aware construction and insertion; overload(6)

      [edit]Example

      Run this code
      #include <deque>#include <iostream>#include <string> template<typename T>std::ostream& operator<<(std::ostream& s,conststd::deque<T>& v){    s.put('{');for(char comma[]{'\0',' ','\0'};constauto& e: v)        s<< comma<< e, comma[0]=',';return s<<"}\n";} int main(){// C++11 initializer list syntax:std::deque<std::string> words1{"the","frogurt","is","also","cursed"};std::cout<<"1: "<< words1; // words2 == words1std::deque<std::string> words2(words1.begin(), words1.end());std::cout<<"2: "<< words2; // words3 == words1std::deque<std::string> words3(words1);std::cout<<"3: "<< words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}std::deque<std::string> words4(5,"Mo");std::cout<<"4: "<< words4; constauto rg={"cat","cow","crow"};#ifdef __cpp_lib_containers_rangesstd::deque<std::string> words5(std::from_range, rg);// overload (6)#elsestd::deque<std::string> words5(rg.begin(), rg.end());// overload (5)#endifstd::cout<<"5: "<< words5;}

      Output:

      1: {the, frogurt, is, also, cursed}2: {the, frogurt, is, also, cursed}3: {the, frogurt, is, also, cursed}4: {Mo, Mo, Mo, Mo, Mo}5: {cat, cow, crow}

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 144C++98the complexity requirement of overload(5) was the same
      as that of the corresponding overload ofstd::vector
      changed to linear complexity
      LWG 237C++98the complexity requirement of overload
      (5) was linear infirst- last
      changed to linear in
      std::distance(first, last)
      LWG 438C++98overload(5) would only call overload(4)
      ifInputIt is an integral type
      calls overload(4) ifInputIt
      is not anLegacyInputIterator
      LWG 2193C++11the default constructor was explicitmade non-explicit
      LWG 2210C++11overload(3) did not have an allocator parameteradded the parameter
      N3346C++11for overload(3), the elements in
      the container were value-initialized
      they are default-inserted

      [edit]See also

      assigns values to the container
      (public member function)[edit]
      assigns values to the container
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/deque/deque&oldid=183074"

      [8]ページ先頭

      ©2009-2025 Movatter.jp