Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

      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)
       
      void shrink_to_fit();
      (constexpr since C++20)

      Requests the removal of unused capacity.

      It is a non-binding request to reducecapacity() tosize(). It depends on the implementation whether the request is fulfilled.

      If reallocation occurs, all iterators (including theend() iterator) and all references to the elements are invalidated. If no reallocation occurs, no iterators or references are invalidated.

      IfT is notMoveInsertable intostd::vector<T, Allocator>, the behavior is undefined.

      (since C++11)

      Contents

      [edit]Complexity

      At most linear in the size of the container.

      Exceptions

      If an exception is thrown other than by the move constructor of a non-CopyInsertableT, there are no effects.

      (since C++11)

      [edit]Notes

      In libstdc++,shrink_to_fit() isnot available in C++98 mode.

      [edit]Example

      [edit]
      Run this code
      #include <iostream>#include <vector> int main(){std::vector<int> v;std::cout<<"Default-constructed capacity is "<< v.capacity()<<'\n';    v.resize(100);std::cout<<"Capacity of a 100-element vector is "<< v.capacity()<<'\n';    v.resize(50);std::cout<<"Capacity after resize(50) is "<< v.capacity()<<'\n';    v.shrink_to_fit();std::cout<<"Capacity after shrink_to_fit() is "<< v.capacity()<<'\n';    v.clear();std::cout<<"Capacity after clear() is "<< v.capacity()<<'\n';    v.shrink_to_fit();std::cout<<"Capacity after shrink_to_fit() is "<< v.capacity()<<'\n';for(int i=1000; i<1300;++i)        v.push_back(i);std::cout<<"Capacity after adding 300 elements is "<< v.capacity()<<'\n';    v.shrink_to_fit();std::cout<<"Capacity after shrink_to_fit() is "<< v.capacity()<<'\n';}

      Possible output:

      Default-constructed capacity is 0Capacity of a 100-element vector is 100Capacity after resize(50) is 100Capacity after shrink_to_fit() is 50Capacity after clear() is 50Capacity after shrink_to_fit() is 0Capacity after adding 300 elements is 512Capacity after shrink_to_fit() is 300

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 755C++98std::vector lacked explicit shrink-to-fit operationsprovided
      LWG 2033C++98
      C++11
      1. the complexity requirement was missing (C++98)
      2.T was not required to beMoveInsertable (C++11)
      1. added
      2. required
      LWG 2223C++98
      C++11
      1. references, pointers, and iterators were not invalidated (C++98)
      2. there was no exception safety guarantee (C++11)
      1. they may be invalidated
      2. added

      [edit]See also

      returns the number of elements
      (public member function)[edit]
      returns the number of elements that can be held in currently allocated storage
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/vector/shrink_to_fit&oldid=121457"

      [8]ページ先頭

      ©2009-2025 Movatter.jp