Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

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

      vector( InputIt first, InputIt last,

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

      constexpr vector(std::from_range_t, R&& rg,

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

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

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

      IfT is notCopyInsertable intovector, the behavior is undefined.

      (since C++11)
      5) Constructs avector 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.

      If any of the following conditions is satisfied, the behavior is undefined:

      (since C++11)
      6) Constructs avector with the contents of the rangerg. Each iterator inrg is dereferenced exactly once.
      If any of the following conditions is satisfied, the behavior is undefined:
      7) The copy constructor. Constructs avector 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 avector 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 intovector, the behavior is undefined.
      10) Same as the move constructor, except thatalloc is used as the allocator.
      IfT is notMoveInsertable intovector, the behavior is undefined.
      11) Equivalent tovector(il.begin(), il.end(), alloc).

      Contents

      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 therange of elements to copy the elements from
      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

      Complexity

      1,2) Constant.
      3,4) Linear incount.
      5) Givenstd::distance(first, last) as\(\scriptsize N \)N:
      • The copy constructor ofT is only called\(\scriptsize N \)N times.
      • No reallocation occurs.
      • Otherwise:
      • The copy constructor ofT is called\(\scriptsize O(N) \)O(N) times.
      • Reallocation occurs\(\scriptsize O(\log N) \)O(log N) times.
      6) Givenranges::distance(rg) as\(\scriptsize N \)N:
      (until C++26)
      • IfR satisfies one of the following conditions:
      then:
      (since C++26)
      • Initializes exactly\(\scriptsize N \)N elements from the result of dereferencing successive iterators ofrg.
      • No reallocation occurs.
      • Otherwise:
      • The copy or move constructor ofT is called\(\scriptsize O(N) \)O(N) times.
      • Reallocation occurs\(\scriptsize O(\log N) \)O(log N) times.
      7) Linear inother.size().
      8) Constant.
      9) Linear inother.size().
      10) Linear inother.size() ifalloc!= other.get_allocator(), otherwise constant.
      11) Linear ininit.size().

      Exceptions

      Calls toAllocator::allocate may throw.

      Notes

      After container move construction (overload(8)), 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)
      __cpp_lib_ranges_reserve_hint202502L(C++26)ranges::approximately_sized_range andranges::reserve_hint; overload(6)

      Example

      Run this code
      #include <iostream>#include <string>#include <vector> template<typename T>std::ostream& operator<<(std::ostream& s,conststd::vector<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::vector<std::string> words1{"the","frogurt","is","also","cursed"};std::cout<<"1: "<< words1; // words2 == words1std::vector<std::string> words2(words1.begin(), words1.end());std::cout<<"2: "<< words2; // words3 == words1std::vector<std::string> words3(words1);std::cout<<"3: "<< words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}std::vector<std::string> words4(5,"Mo");std::cout<<"4: "<< words4; constauto rg={"cat","cow","crow"};#ifdef __cpp_lib_containers_rangesstd::vector<std::string> words5(std::from_range, rg);// overload (6)#elsestd::vector<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}

      Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 134C++98overload(5) allowed up to2N  copy
      constructor calls in the input iterator case
      changed toO(N) calls
      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

      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/vector/vector&oldid=183060"

      [8]ページ先頭

      ©2009-2025 Movatter.jp