From 3fdc3e5ee96dca5b11d1694975a65200787eab86 Mon Sep 17 00:00:00 2001 From: DongHun Kwak Date: Thu, 5 Dec 2019 15:11:01 +0900 Subject: Imported Upstream version 1.66.0 --- doc/html/boost/container/adaptive_pool.html | 118 ++-- doc/html/boost/container/adaptive_pool/rebind.html | 8 +- doc/html/boost/container/allocator.html | 98 +-- doc/html/boost/container/allocator/rebind.html | 8 +- doc/html/boost/container/allocator_arg.html | 2 +- doc/html/boost/container/allocator_arg_t.html | 2 +- doc/html/boost/container/allocator_traits.html | 58 +- .../allocator_traits/portable_rebind_alloc.html | 8 +- doc/html/boost/container/basic_string.html | 658 ++++++++++----------- .../container/constructible__idp46140928.html | 66 --- .../container/constructible__idp46150320.html | 68 --- .../container/constructible__idp67492240.html | 66 +++ .../container/constructible__idp67501632.html | 68 +++ doc/html/boost/container/default_init.html | 2 +- doc/html/boost/container/default_init_t.html | 2 +- doc/html/boost/container/deque.html | 342 +++++------ doc/html/boost/container/erased_type.html | 2 +- doc/html/boost/container/flat_map.html | 508 ++++++++-------- doc/html/boost/container/flat_multimap.html | 458 +++++++------- doc/html/boost/container/flat_multiset.html | 444 +++++++------- doc/html/boost/container/flat_set.html | 441 +++++++------- .../boost/container/insert_return_type_base.html | 20 +- doc/html/boost/container/list.html | 362 ++++++------ doc/html/boost/container/map.html | 422 ++++++------- doc/html/boost/container/multimap.html | 370 ++++++------ doc/html/boost/container/multiset.html | 350 +++++------ doc/html/boost/container/new_allocator.html | 64 +- doc/html/boost/container/new_allocator/rebind.html | 8 +- .../container/new_allocator__idp41598944.html | 117 ---- .../new_allocator__idp41598944/rebind.html | 59 -- .../container/new_allocator__idp62944752.html | 117 ++++ .../new_allocator__idp62944752/rebind.html | 59 ++ doc/html/boost/container/node_allocator.html | 112 ++-- .../boost/container/node_allocator/rebind.html | 8 +- doc/html/boost/container/node_handle.html | 88 +-- .../boost/container/operator___idp44937568.html | 93 --- .../boost/container/operator___idp44947584.html | 93 --- .../boost/container/operator___idp44977584.html | 93 --- .../boost/container/operator___idp44987568.html | 93 --- .../boost/container/operator___idp66288880.html | 93 +++ .../boost/container/operator___idp66298896.html | 93 +++ .../boost/container/operator___idp66328896.html | 93 +++ .../boost/container/operator___idp66338880.html | 93 +++ doc/html/boost/container/operator_idp44957616.html | 93 --- doc/html/boost/container/operator_idp44967600.html | 93 --- doc/html/boost/container/operator_idp66308928.html | 93 +++ doc/html/boost/container/operator_idp66318912.html | 93 +++ doc/html/boost/container/optimize_size.html | 2 +- doc/html/boost/container/ordered_range.html | 2 +- doc/html/boost/container/ordered_range_t.html | 2 +- doc/html/boost/container/ordered_unique_range.html | 2 +- .../boost/container/ordered_unique_range_t.html | 2 +- doc/html/boost/container/pmr/basic_string_of.html | 2 +- doc/html/boost/container/pmr/deque_of.html | 2 +- doc/html/boost/container/pmr/flat_map_of.html | 2 +- doc/html/boost/container/pmr/flat_multimap_of.html | 2 +- doc/html/boost/container/pmr/flat_multiset_of.html | 2 +- doc/html/boost/container/pmr/flat_set_of.html | 2 +- .../boost/container/pmr/get_default_resource.html | 2 +- doc/html/boost/container/pmr/list_of.html | 2 +- doc/html/boost/container/pmr/map_of.html | 2 +- doc/html/boost/container/pmr/memory_resource.html | 58 +- .../container/pmr/monotonic_buffer_resource.html | 78 +-- doc/html/boost/container/pmr/multimap_of.html | 8 +- doc/html/boost/container/pmr/multiset_of.html | 2 +- .../boost/container/pmr/new_delete_resource.html | 2 +- .../boost/container/pmr/null_memory_resource.html | 2 +- doc/html/boost/container/pmr/operator__.html | 57 ++ .../container/pmr/operator___idp42065856.html | 57 -- .../container/pmr/operator___idp42071824.html | 57 -- .../boost/container/pmr/polymorphic_allocator.html | 64 +- doc/html/boost/container/pmr/pool_options.html | 14 +- doc/html/boost/container/pmr/resource_adaptor.html | 2 +- .../boost/container/pmr/resource_adaptor_imp.html | 64 +- .../boost/container/pmr/set_default_resource.html | 2 +- doc/html/boost/container/pmr/set_of.html | 2 +- doc/html/boost/container/pmr/slist_of.html | 8 +- doc/html/boost/container/pmr/small_vector_of.html | 2 +- doc/html/boost/container/pmr/stable_vector_of.html | 2 +- .../container/pmr/synchronized_pool_resource.html | 96 +-- .../container/pmr/unsynchronized_idp42230704.html | 194 ------ .../container/pmr/unsynchronized_idp63576512.html | 194 ++++++ doc/html/boost/container/pmr/vector_of.html | 2 +- .../boost/container/scoped_allocator_adaptor.html | 124 ++-- .../container/scoped_allocator_adaptor/rebind.html | 8 +- doc/html/boost/container/set.html | 362 ++++++------ doc/html/boost/container/slist.html | 396 ++++++------- doc/html/boost/container/small_vector.html | 100 ++-- .../boost/container/small_vector_allocator.html | 90 +-- .../container/small_vector_allocator/rebind.html | 8 +- doc/html/boost/container/small_vector_base.html | 22 +- doc/html/boost/container/stable_vector.html | 326 +++++----- doc/html/boost/container/static_vector.html | 302 +++++----- doc/html/boost/container/string.html | 2 +- doc/html/boost/container/swap_idp44997552.html | 86 --- doc/html/boost/container/swap_idp66348864.html | 86 +++ doc/html/boost/container/throw_bad_alloc.html | 2 +- doc/html/boost/container/throw_length_error.html | 2 +- doc/html/boost/container/throw_logic_error.html | 2 +- doc/html/boost/container/throw_out_of_range.html | 2 +- doc/html/boost/container/throw_runtime_error.html | 8 +- doc/html/boost/container/tree_assoc_defaults.html | 2 +- doc/html/boost/container/tree_assoc_options.html | 2 +- doc/html/boost/container/tree_type.html | 2 +- doc/html/boost/container/tree_type_enum.html | 2 +- doc/html/boost/container/uses_allocator.html | 8 +- doc/html/boost/container/vector.html | 350 +++++------ doc/html/boost/container/wstring.html | 2 +- 108 files changed, 4992 insertions(+), 4998 deletions(-) delete mode 100644 doc/html/boost/container/constructible__idp46140928.html delete mode 100644 doc/html/boost/container/constructible__idp46150320.html create mode 100644 doc/html/boost/container/constructible__idp67492240.html create mode 100644 doc/html/boost/container/constructible__idp67501632.html delete mode 100644 doc/html/boost/container/new_allocator__idp41598944.html delete mode 100644 doc/html/boost/container/new_allocator__idp41598944/rebind.html create mode 100644 doc/html/boost/container/new_allocator__idp62944752.html create mode 100644 doc/html/boost/container/new_allocator__idp62944752/rebind.html delete mode 100644 doc/html/boost/container/operator___idp44937568.html delete mode 100644 doc/html/boost/container/operator___idp44947584.html delete mode 100644 doc/html/boost/container/operator___idp44977584.html delete mode 100644 doc/html/boost/container/operator___idp44987568.html create mode 100644 doc/html/boost/container/operator___idp66288880.html create mode 100644 doc/html/boost/container/operator___idp66298896.html create mode 100644 doc/html/boost/container/operator___idp66328896.html create mode 100644 doc/html/boost/container/operator___idp66338880.html delete mode 100644 doc/html/boost/container/operator_idp44957616.html delete mode 100644 doc/html/boost/container/operator_idp44967600.html create mode 100644 doc/html/boost/container/operator_idp66308928.html create mode 100644 doc/html/boost/container/operator_idp66318912.html create mode 100644 doc/html/boost/container/pmr/operator__.html delete mode 100644 doc/html/boost/container/pmr/operator___idp42065856.html delete mode 100644 doc/html/boost/container/pmr/operator___idp42071824.html delete mode 100644 doc/html/boost/container/pmr/unsynchronized_idp42230704.html create mode 100644 doc/html/boost/container/pmr/unsynchronized_idp63576512.html delete mode 100644 doc/html/boost/container/swap_idp44997552.html create mode 100644 doc/html/boost/container/swap_idp66348864.html (limited to 'doc/html/boost/container') diff --git a/doc/html/boost/container/adaptive_pool.html b/doc/html/boost/container/adaptive_pool.html index 0031275075..2cc1de3aff 100644 --- a/doc/html/boost/container/adaptive_pool.html +++ b/doc/html/boost/container/adaptive_pool.html @@ -57,38 +57,38 @@ }; // construct/copy/destruct - adaptive_pool() noexcept; - adaptive_pool(const adaptive_pool &) noexcept; + adaptive_pool() noexcept; + adaptive_pool(const adaptive_pool &) noexcept; template<typename T2> - adaptive_pool(const adaptive_pool< T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)> &) noexcept; - ~adaptive_pool(); + adaptive_pool(const adaptive_pool< T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)> &) noexcept; + ~adaptive_pool(); - // public member functions - BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version<=2))); - size_type max_size() const noexcept; - pointer allocate(size_type, const void * = 0); - void deallocate(const pointer &, size_type) noexcept; - pointer allocation_command(allocation_type, size_type, size_type &, + // public member functions + BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version<=2))); + size_type max_size() const noexcept; + pointer allocate(size_type, const void * = 0); + void deallocate(const pointer &, size_type) noexcept; + pointer allocation_command(allocation_type, size_type, size_type &, pointer &); - size_type size(pointer) const noexcept; - pointer allocate_one(); - void allocate_individual(std::size_t, multiallocation_chain &); - void deallocate_one(pointer) noexcept; - void deallocate_individual(multiallocation_chain &) noexcept; - void allocate_many(size_type, std::size_t, multiallocation_chain &); - void allocate_many(const size_type *, size_type, multiallocation_chain &); - void deallocate_many(multiallocation_chain &) noexcept; + size_type size(pointer) const noexcept; + pointer allocate_one(); + void allocate_individual(std::size_t, multiallocation_chain &); + void deallocate_one(pointer) noexcept; + void deallocate_individual(multiallocation_chain &) noexcept; + void allocate_many(size_type, std::size_t, multiallocation_chain &); + void allocate_many(const size_type *, size_type, multiallocation_chain &); + void deallocate_many(multiallocation_chain &) noexcept; - // public static functions - static void deallocate_free_blocks() noexcept; + // public static functions + static void deallocate_free_blocks() noexcept; - // friend functions - friend void swap(adaptive_pool &, adaptive_pool &) noexcept; - friend bool operator==(const adaptive_pool &, const adaptive_pool &) noexcept; - friend bool operator!=(const adaptive_pool &, const adaptive_pool &) noexcept; + // friend functions + friend void swap(adaptive_pool &, adaptive_pool &) noexcept; + friend bool operator==(const adaptive_pool &, const adaptive_pool &) noexcept; + friend bool operator!=(const adaptive_pool &, const adaptive_pool &) noexcept; - // private member functions - pointer priv_allocation_command(allocation_type, std::size_t, size_type &, + // private member functions + pointer priv_allocation_command(allocation_type, std::size_t, size_type &, pointer &); // public data members @@ -98,13 +98,13 @@ static const std::size_t real_nodes_per_block; };
-

Description

+

Description

An STL node allocator that uses a modified DLMalloc as memory source.

This node allocator shares a segregated storage between all instances of adaptive_pool with equal sizeof(T).

NodesPerBlock is the number of nodes allocated at once when the allocator needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks that the adaptive node pool will hold. The rest of the totally free blocks will be deallocated to the memory manager.

OverheadPercent is the (approximated) maximum size overhead (1-20%) of the allocator: (memory usable for nodes / total memory allocated from the memory allocator)

-

+

adaptive_pool public types

@@ -115,101 +115,101 @@
-

+

adaptive_pool public construct/copy/destruct

  1. -
    adaptive_pool() noexcept;
    Default constructor.
  2. +
    adaptive_pool() noexcept;
    Default constructor.
  3. -
    adaptive_pool(const adaptive_pool &) noexcept;
    Copy constructor from other adaptive_pool.
  4. +
    adaptive_pool(const adaptive_pool &) noexcept;
    Copy constructor from other adaptive_pool.
  5. template<typename T2> 
    -  adaptive_pool(const adaptive_pool< T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)> &) noexcept;
    Copy constructor from related adaptive_pool.
  6. + adaptive_pool(const adaptive_pool< T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)> &) noexcept;Copy constructor from related adaptive_pool.
  7. -
    ~adaptive_pool();
    Destructor.
  8. +
    ~adaptive_pool();
    Destructor.
-

-adaptive_pool public member functions

+

+adaptive_pool public member functions

    -
  1.  BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version<=2)));
  2. +
  3.  BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version<=2)));
  4. -
    size_type max_size() const noexcept;
    +
    size_type max_size() const noexcept;

    Returns the number of elements that could be allocated. Never throws

  5. -
    pointer allocate(size_type count, const void * = 0);
    +
    pointer allocate(size_type count, const void * = 0);

    Allocate memory for an array of count elements. Throws std::bad_alloc if there is no enough memory

  6. -
    void deallocate(const pointer & ptr, size_type count) noexcept;
    +
    void deallocate(const pointer & ptr, size_type count) noexcept;

    Deallocate allocated memory. Never throws

  7. -
  8. pointer allocation_command(allocation_type command, size_type limit_size, 
    +
  9. pointer allocation_command(allocation_type command, size_type limit_size, 
                                size_type & prefer_in_recvd_out_size, 
                                pointer & reuse);
  10. -
    size_type size(pointer p) const noexcept;
    +
    size_type size(pointer p) const noexcept;

    Returns maximum the number of objects the previously allocated memory pointed by p can hold.

  11. -
    pointer allocate_one();
    +
    pointer allocate_one();

    Allocates just one object. Memory allocated with this function must be deallocated only with deallocate_one(). Throws bad_alloc if there is no enough memory

  12. -
    void allocate_individual(std::size_t num_elements, 
    +
    void allocate_individual(std::size_t num_elements, 
                              multiallocation_chain & chain);

    Allocates many elements of size == 1. Elements must be individually deallocated with deallocate_one()

  13. -
    void deallocate_one(pointer p) noexcept;
    +
    void deallocate_one(pointer p) noexcept;

    Deallocates memory previously allocated with allocate_one(). You should never use deallocate_one to deallocate memory allocated with other functions different from allocate_one(). Never throws

  14. -
  15. void deallocate_individual(multiallocation_chain & chain) noexcept;
  16. +
  17. void deallocate_individual(multiallocation_chain & chain) noexcept;
  18. -
    void allocate_many(size_type elem_size, std::size_t n_elements, 
    +
    void allocate_many(size_type elem_size, std::size_t n_elements, 
                        multiallocation_chain & chain);

    Allocates many elements of size elem_size. Elements must be individually deallocated with deallocate()

  19. -
    void allocate_many(const size_type * elem_sizes, size_type n_elements, 
    +
    void allocate_many(const size_type * elem_sizes, size_type n_elements, 
                        multiallocation_chain & chain);

    Allocates n_elements elements, each one of size elem_sizes[i] Elements must be individually deallocated with deallocate()

  20. -
  21. void deallocate_many(multiallocation_chain & chain) noexcept;
  22. +
  23. void deallocate_many(multiallocation_chain & chain) noexcept;
-

-adaptive_pool public static functions

+

+adaptive_pool public static functions

  1. -
    static void deallocate_free_blocks() noexcept;
    Deallocates all free blocks of the pool.
+
static void deallocate_free_blocks() noexcept;
Deallocates all free blocks of the pool.
-

-adaptive_pool friend functions

+

+adaptive_pool friend functions

  1. -
    friend void swap(adaptive_pool &, adaptive_pool &) noexcept;
    +
    friend void swap(adaptive_pool &, adaptive_pool &) noexcept;

    Swaps allocators. Does not throw. If each allocator is placed in a different memory segment, the result is undefined.

  2. -
    friend bool operator==(const adaptive_pool &, const adaptive_pool &) noexcept;
    +
    friend bool operator==(const adaptive_pool &, const adaptive_pool &) noexcept;

    An allocator always compares to true, as memory allocated with one instance can be deallocated by another instance

  3. -
    friend bool operator!=(const adaptive_pool &, const adaptive_pool &) noexcept;
    +
    friend bool operator!=(const adaptive_pool &, const adaptive_pool &) noexcept;

    An allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

-

-adaptive_pool private member functions

-
  1. pointer priv_allocation_command(allocation_type command, 
    +

    +adaptive_pool private member functions

    +
    1. pointer priv_allocation_command(allocation_type command, 
                                       std::size_t limit_size, 
                                       size_type & prefer_in_recvd_out_size, 
                                       pointer & reuse_ptr);
    diff --git a/doc/html/boost/container/adaptive_pool/rebind.html b/doc/html/boost/container/adaptive_pool/rebind.html index 28d45589ef..f3473a4bd5 100644 --- a/doc/html/boost/container/adaptive_pool/rebind.html +++ b/doc/html/boost/container/adaptive_pool/rebind.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -39,7 +39,7 @@ typedef adaptive_pool< T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent > other; };
-

Description

+

Description

Obtains adaptive_pool from adaptive_pool

@@ -53,7 +53,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/boost/container/allocator.html b/doc/html/boost/container/allocator.html index 07cc5cb4b8..3039f9ca86 100644 --- a/doc/html/boost/container/allocator.html +++ b/doc/html/boost/container/allocator.html @@ -54,140 +54,140 @@ }; // construct/copy/destruct - allocator() noexcept; - allocator(const allocator &) noexcept; - template<typename T2> allocator(const allocator< T2 > &) noexcept; + allocator() noexcept; + allocator(const allocator &) noexcept; + template<typename T2> allocator(const allocator< T2 > &) noexcept; - // public member functions - pointer allocate(size_type, const void * = 0); - void deallocate(pointer, size_type) noexcept; - size_type max_size() const noexcept; - pointer allocation_command(allocation_type, size_type, size_type &, + // public member functions + pointer allocate(size_type, const void * = 0); + void deallocate(pointer, size_type) noexcept; + size_type max_size() const noexcept; + pointer allocation_command(allocation_type, size_type, size_type &, pointer &); - size_type size(pointer) const noexcept; - pointer allocate_one(); - void allocate_individual(std::size_t, multiallocation_chain &); - void deallocate_one(pointer) noexcept; - void deallocate_individual(multiallocation_chain &) noexcept; - void allocate_many(size_type, std::size_t, multiallocation_chain &); - void allocate_many(const size_type *, size_type, multiallocation_chain &); - void deallocate_many(multiallocation_chain &) noexcept; + size_type size(pointer) const noexcept; + pointer allocate_one(); + void allocate_individual(std::size_t, multiallocation_chain &); + void deallocate_one(pointer) noexcept; + void deallocate_individual(multiallocation_chain &) noexcept; + void allocate_many(size_type, std::size_t, multiallocation_chain &); + void allocate_many(const size_type *, size_type, multiallocation_chain &); + void deallocate_many(multiallocation_chain &) noexcept; - // friend functions - friend void swap(self_t &, self_t &) noexcept; - friend bool operator==(const allocator &, const allocator &) noexcept; - friend bool operator!=(const allocator &, const allocator &) noexcept; + // friend functions + friend void swap(self_t &, self_t &) noexcept; + friend bool operator==(const allocator &, const allocator &) noexcept; + friend bool operator!=(const allocator &, const allocator &) noexcept; - // private member functions - pointer priv_allocation_command(allocation_type, std::size_t, size_type &, + // private member functions + pointer priv_allocation_command(allocation_type, std::size_t, size_type &, pointer &); };
-

Description

+

Description

This class is an extended STL-compatible that offers advanced allocation mechanism (in-place expansion, shrinking, burst-allocation...)

This allocator is a wrapper around a modified DLmalloc. If Version is 1, the allocator is a STL conforming allocator. If Version is 2, the allocator offers advanced expand in place and burst allocation capabilities.

AllocationDisableMask works only if Version is 2 and it can be an inclusive OR of allocation types the user wants to disable.

-

+

allocator public construct/copy/destruct

  1. -
    allocator() noexcept;
    +
    allocator() noexcept;

    Default constructor Never throws

  2. -
    allocator(const allocator &) noexcept;
    +
    allocator(const allocator &) noexcept;

    Constructor from other allocator. Never throws

  3. -
    template<typename T2> allocator(const allocator< T2 > &) noexcept;
    +
    template<typename T2> allocator(const allocator< T2 > &) noexcept;

    Constructor from related allocator. Never throws

-

-allocator public member functions

+

+allocator public member functions

  1. -
    pointer allocate(size_type count, const void * hint = 0);
    +
    pointer allocate(size_type count, const void * hint = 0);

    Allocates memory for an array of count elements. Throws std::bad_alloc if there is no enough memory If Version is 2, this allocated memory can only be deallocated with deallocate() or (for Version == 2) deallocate_many()

  2. -
    void deallocate(pointer ptr, size_type) noexcept;
    +
    void deallocate(pointer ptr, size_type) noexcept;

    Deallocates previously allocated memory. Never throws

  3. -
    size_type max_size() const noexcept;
    +
    size_type max_size() const noexcept;

    Returns the maximum number of elements that could be allocated. Never throws

  4. -
    pointer allocation_command(allocation_type command, size_type limit_size, 
    +
    pointer allocation_command(allocation_type command, size_type limit_size, 
                                size_type & prefer_in_recvd_out_size, 
                                pointer & reuse);

    An advanced function that offers in-place expansion shrink to fit and new allocation capabilities. Memory allocated with this function can only be deallocated with deallocate() or deallocate_many(). This function is available only with Version == 2

  5. -
    size_type size(pointer p) const noexcept;
    +
    size_type size(pointer p) const noexcept;

    Returns maximum the number of objects the previously allocated memory pointed by p can hold. Memory must not have been allocated with allocate_one or allocate_individual. This function is available only with Version == 2

  6. -
    pointer allocate_one();
    +
    pointer allocate_one();

    Allocates just one object. Memory allocated with this function must be deallocated only with deallocate_one(). Throws bad_alloc if there is no enough memory This function is available only with Version == 2

  7. -
    void allocate_individual(std::size_t num_elements, 
    +
    void allocate_individual(std::size_t num_elements, 
                              multiallocation_chain & chain);

    Allocates many elements of size == 1. Elements must be individually deallocated with deallocate_one() This function is available only with Version == 2

  8. -
    void deallocate_one(pointer p) noexcept;
    +
    void deallocate_one(pointer p) noexcept;

    Deallocates memory previously allocated with allocate_one(). You should never use deallocate_one to deallocate memory allocated with other functions different from allocate_one() or allocate_individual.

  9. -
    void deallocate_individual(multiallocation_chain & chain) noexcept;
    +
    void deallocate_individual(multiallocation_chain & chain) noexcept;

    Deallocates memory allocated with allocate_one() or allocate_individual(). This function is available only with Version == 2

  10. -
    void allocate_many(size_type elem_size, std::size_t n_elements, 
    +
    void allocate_many(size_type elem_size, std::size_t n_elements, 
                        multiallocation_chain & chain);

    Allocates many elements of size elem_size. Elements must be individually deallocated with deallocate() This function is available only with Version == 2

  11. -
    void allocate_many(const size_type * elem_sizes, size_type n_elements, 
    +
    void allocate_many(const size_type * elem_sizes, size_type n_elements, 
                        multiallocation_chain & chain);

    Allocates n_elements elements, each one of size elem_sizes[i] Elements must be individually deallocated with deallocate() This function is available only with Version == 2

  12. -
    void deallocate_many(multiallocation_chain & chain) noexcept;
    +
    void deallocate_many(multiallocation_chain & chain) noexcept;

    Deallocates several elements allocated by allocate_many(), allocate(), or allocation_command(). This function is available only with Version == 2

-

-allocator friend functions

+

+allocator friend functions

  1. -
    friend void swap(self_t &, self_t &) noexcept;
    +
    friend void swap(self_t &, self_t &) noexcept;

    Swaps two allocators, does nothing because this allocator is stateless

  2. -
    friend bool operator==(const allocator &, const allocator &) noexcept;
    +
    friend bool operator==(const allocator &, const allocator &) noexcept;

    An allocator always compares to true, as memory allocated with one instance can be deallocated by another instance

  3. -
    friend bool operator!=(const allocator &, const allocator &) noexcept;
    +
    friend bool operator!=(const allocator &, const allocator &) noexcept;

    An allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

-

-allocator private member functions

-
  1. pointer priv_allocation_command(allocation_type command, 
    +

    +allocator private member functions

    +
    1. pointer priv_allocation_command(allocation_type command, 
                                       std::size_t limit_size, 
                                       size_type & prefer_in_recvd_out_size, 
                                       pointer & reuse_ptr);
    diff --git a/doc/html/boost/container/allocator/rebind.html b/doc/html/boost/container/allocator/rebind.html index 69b6b34b62..062eec0f4a 100644 --- a/doc/html/boost/container/allocator/rebind.html +++ b/doc/html/boost/container/allocator/rebind.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -39,7 +39,7 @@ typedef allocator< T2, Version, AllocationDisableMask > other; };
-

Description

+

Description

Obtains an allocator that allocates objects of type T2

@@ -53,7 +53,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/boost/container/allocator_arg.html b/doc/html/boost/container/allocator_arg.html index 8c7d344a01..f4543a92fc 100644 --- a/doc/html/boost/container/allocator_arg.html +++ b/doc/html/boost/container/allocator_arg.html @@ -34,7 +34,7 @@ static allocator_arg_t allocator_arg;
-

Description

+

Description

A instance of type allocator_arg_t

diff --git a/doc/html/boost/container/allocator_arg_t.html b/doc/html/boost/container/allocator_arg_t.html index 5468e5b99c..d79dcd0fcd 100644 --- a/doc/html/boost/container/allocator_arg_t.html +++ b/doc/html/boost/container/allocator_arg_t.html @@ -35,7 +35,7 @@ typedef unspecified allocator_arg_t;
-

Description

+

Description

The allocator_arg_t struct is an empty structure type used as a unique type to disambiguate constructor and function overloading. Specifically, several types have constructors with allocator_arg_t as the first argument, immediately followed by an argument of a type that satisfies Allocator requirements

diff --git a/doc/html/boost/container/allocator_traits.html b/doc/html/boost/container/allocator_traits.html index 9b3a439fac..776c973c09 100644 --- a/doc/html/boost/container/allocator_traits.html +++ b/doc/html/boost/container/allocator_traits.html @@ -45,9 +45,9 @@ typedef see_documentation const_void_pointer; typedef see_documentation difference_type; typedef see_documentation size_type; - typedef see_documentation propagate_on_container_copy_assignment; - typedef see_documentation propagate_on_container_move_assignment; - typedef see_documentation propagate_on_container_swap; + typedef see_documentation propagate_on_container_copy_assignment; + typedef see_documentation propagate_on_container_move_assignment; + typedef see_documentation propagate_on_container_swap; typedef see_documentation is_always_equal; typedef see_documentation is_partially_propagable; typedef see_documentation rebind_alloc; @@ -60,23 +60,23 @@ typedef see_documentation type; }; - // public static functions - static pointer allocate(Allocator &, size_type); - static void deallocate(Allocator &, pointer, size_type); - static pointer allocate(Allocator &, size_type, const_void_pointer); - template<typename T> static void destroy(Allocator &, T *) noexcept; - static size_type max_size(const Allocator &) noexcept; - static Allocator select_on_container_copy_construction(const Allocator &); + // public static functions + static pointer allocate(Allocator &, size_type); + static void deallocate(Allocator &, pointer, size_type); + static pointer allocate(Allocator &, size_type, const_void_pointer); + template<typename T> static void destroy(Allocator &, T *) noexcept; + static size_type max_size(const Allocator &) noexcept; + static Allocator select_on_container_copy_construction(const Allocator &); template<typename T, class... Args> - static void construct(Allocator &, T *, Args &&...); - static bool storage_is_unpropagable(const Allocator &, pointer) noexcept; - static bool equal(const Allocator &, const Allocator &) noexcept; + static void construct(Allocator &, T *, Args &&...); + static bool storage_is_unpropagable(const Allocator &, pointer) noexcept; + static bool equal(const Allocator &, const Allocator &) noexcept; };
-

Description

+

Description

The class template allocator_traits supplies a uniform interface to all allocator types. This class is a C++03-compatible implementation of std::allocator_traits

-

+

allocator_traits public types

@@ -123,17 +123,17 @@
  • -typedef see_documentation propagate_on_container_copy_assignment;

    +typedef see_documentation propagate_on_container_copy_assignment;

    Allocator::propagate_on_container_copy_assignment if such a type exists, otherwise a type with an internal constant static boolean member value == false.

  • -typedef see_documentation propagate_on_container_move_assignment;

    +typedef see_documentation propagate_on_container_move_assignment;

    Allocator::propagate_on_container_move_assignment if such a type exists, otherwise a type with an internal constant static boolean member value == false.

  • -typedef see_documentation propagate_on_container_swap;

    +typedef see_documentation propagate_on_container_swap;

    Allocator::propagate_on_container_swap if such a type exists, otherwise a type with an internal constant static boolean member value == false.

  • @@ -160,45 +160,45 @@
  • -

    -allocator_traits public static functions

    +

    +allocator_traits public static functions

    1. -
      static pointer allocate(Allocator & a, size_type n);
      +
      static pointer allocate(Allocator & a, size_type n);

      Returns: a.allocate(n)

    2. -
      static void deallocate(Allocator & a, pointer p, size_type n);
      +
      static void deallocate(Allocator & a, pointer p, size_type n);

      Returns: a.deallocate(p, n)

      Throws: Nothing

    3. -
      static pointer allocate(Allocator & a, size_type n, const_void_pointer p);
      +
      static pointer allocate(Allocator & a, size_type n, const_void_pointer p);

      Effects: calls a.allocate(n, p) if that call is well-formed; otherwise, invokes a.allocate(n)

    4. -
      template<typename T> static void destroy(Allocator & a, T * p) noexcept;
      +
      template<typename T> static void destroy(Allocator & a, T * p) noexcept;

      Effects: calls a.destroy(p) if that call is well-formed; otherwise, invokes p->~T().

    5. -
      static size_type max_size(const Allocator & a) noexcept;
      +
      static size_type max_size(const Allocator & a) noexcept;

      Returns: a.max_size() if that expression is well-formed; otherwise, numeric_limits<size_type>::max().

    6. -
      static Allocator select_on_container_copy_construction(const Allocator & a);
      +
      static Allocator select_on_container_copy_construction(const Allocator & a);

      Returns: a.select_on_container_copy_construction() if that expression is well-formed; otherwise, a.

    7. template<typename T, class... Args> 
      -  static void construct(Allocator & a, T * p, Args &&... args);
      + static void construct(Allocator & a, T * p, Args &&... args);

      Effects: calls a.construct(p, std::forward<Args>(args)...) if that call is well-formed; otherwise, invokes placement new (static_cast<void*>(p)) T(std::forward<Args>(args)...)

    8. -
      static bool storage_is_unpropagable(const Allocator & a, pointer p) noexcept;
      +
      static bool storage_is_unpropagable(const Allocator & a, pointer p) noexcept;

      Returns: a.storage_is_unpropagable(p) if is_partially_propagable::value is true; otherwise, false.

    9. -
      static bool equal(const Allocator & a, const Allocator & b) noexcept;
      +
      static bool equal(const Allocator & a, const Allocator & b) noexcept;

      Returns: true if is_always_equal::value == true, otherwise, a == b.

    diff --git a/doc/html/boost/container/allocator_traits/portable_rebind_alloc.html b/doc/html/boost/container/allocator_traits/portable_rebind_alloc.html index 28a8a7c471..395fec00a6 100644 --- a/doc/html/boost/container/allocator_traits/portable_rebind_alloc.html +++ b/doc/html/boost/container/allocator_traits/portable_rebind_alloc.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -39,7 +39,7 @@ typedef see_documentation type; };
    -

    Description

    +

    Description

    Non-standard extension: Portable allocator rebind for C++03 and C++11 compilers. type is an allocator related to Allocator deduced deduced by rules explained in rebind_alloc.

    @@ -53,7 +53,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost/container/basic_string.html b/doc/html/boost/container/basic_string.html index 40ef609781..d43ed7600d 100644 --- a/doc/html/boost/container/basic_string.html +++ b/doc/html/boost/container/basic_string.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -53,214 +53,214 @@ typedef implementation_defined const_reverse_iterator; // construct/copy/destruct - basic_string() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit basic_string(const allocator_type &) noexcept; - basic_string(const basic_string &); + basic_string() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit basic_string(const allocator_type &) noexcept; + basic_string(const basic_string &); template<template< class, class > class BasicStringView> - explicit basic_string(BasicStringView< CharT, Traits >, + explicit basic_string(BasicStringView< CharT, Traits >, const Allocator & = Allocator()); - basic_string(basic_string &&) noexcept; - basic_string(const basic_string &, const allocator_type &); - basic_string(basic_string &&, const allocator_type &); - basic_string(const basic_string &, size_type, size_type = npos); - basic_string(const basic_string &, size_type, size_type, + basic_string(basic_string &&) noexcept; + basic_string(const basic_string &, const allocator_type &); + basic_string(basic_string &&, const allocator_type &); + basic_string(const basic_string &, size_type, size_type = npos); + basic_string(const basic_string &, size_type, size_type, const allocator_type &); - basic_string(const CharT *, size_type); - basic_string(const CharT *, size_type, const allocator_type &); - basic_string(const CharT *); - basic_string(const CharT *, const allocator_type &); - basic_string(size_type, CharT); - basic_string(size_type, CharT, const allocator_type &); - basic_string(size_type, default_init_t); - basic_string(size_type, default_init_t, const allocator_type &); - template<typename InputIterator> basic_string(InputIterator, InputIterator); + basic_string(const CharT *, size_type); + basic_string(const CharT *, size_type, const allocator_type &); + basic_string(const CharT *); + basic_string(const CharT *, const allocator_type &); + basic_string(size_type, CharT); + basic_string(size_type, CharT, const allocator_type &); + basic_string(size_type, default_init_t); + basic_string(size_type, default_init_t, const allocator_type &); + template<typename InputIterator> basic_string(InputIterator, InputIterator); template<typename InputIterator> - basic_string(InputIterator, InputIterator, const allocator_type &); - basic_string(std::initializer_list< value_type >, + basic_string(InputIterator, InputIterator, const allocator_type &); + basic_string(std::initializer_list< value_type >, const allocator_type & = allocator_type()); - basic_string & operator=(const basic_string &); + basic_string & operator=(const basic_string &); basic_string & - operator=(basic_string &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); - basic_string & operator=(const CharT *); - basic_string & operator=(CharT); + operator=(basic_string &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); + basic_string & operator=(const CharT *); + basic_string & operator=(CharT); template<template< class, class > class BasicStringView> - basic_string & operator=(BasicStringView< CharT, Traits >); - basic_string & operator=(std::initializer_list< CharT >); - ~basic_string(); + basic_string & operator=(BasicStringView< CharT, Traits >); + basic_string & operator=(std::initializer_list< CharT >); + ~basic_string(); - // public member functions - allocator_type get_allocator() const noexcept; - stored_allocator_type & get_stored_allocator() noexcept; - const stored_allocator_type & get_stored_allocator() const noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_iterator cbegin() const noexcept; - const_iterator cend() const noexcept; - const_reverse_iterator crbegin() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const noexcept; - size_type size() const noexcept; - size_type length() const noexcept; - size_type max_size() const noexcept; - void resize(size_type, CharT); - void resize(size_type); - void resize(size_type, default_init_t); - size_type capacity() const noexcept; - void reserve(size_type); - void shrink_to_fit(); - reference front() noexcept; - const_reference front() const noexcept; - reference back() noexcept; - const_reference back() const noexcept; - reference operator[](size_type) noexcept; - const_reference operator[](size_type) const noexcept; - reference at(size_type); - const_reference at(size_type) const; - basic_string & operator+=(const basic_string &); + // public member functions + allocator_type get_allocator() const noexcept; + stored_allocator_type & get_stored_allocator() noexcept; + const stored_allocator_type & get_stored_allocator() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const noexcept; + size_type size() const noexcept; + size_type length() const noexcept; + size_type max_size() const noexcept; + void resize(size_type, CharT); + void resize(size_type); + void resize(size_type, default_init_t); + size_type capacity() const noexcept; + void reserve(size_type); + void shrink_to_fit(); + reference front() noexcept; + const_reference front() const noexcept; + reference back() noexcept; + const_reference back() const noexcept; + reference operator[](size_type) noexcept; + const_reference operator[](size_type) const noexcept; + reference at(size_type); + const_reference at(size_type) const; + basic_string & operator+=(const basic_string &); template<template< class, class > class BasicStringView> - basic_string & operator+=(BasicStringView< CharT, Traits >); - basic_string & operator+=(const CharT *); - basic_string & operator+=(CharT); - basic_string & operator+=(std::initializer_list< CharT >); - basic_string & append(const basic_string &); + basic_string & operator+=(BasicStringView< CharT, Traits >); + basic_string & operator+=(const CharT *); + basic_string & operator+=(CharT); + basic_string & operator+=(std::initializer_list< CharT >); + basic_string & append(const basic_string &); template<template< class, class > class BasicStringView> - basic_string & append(BasicStringView< CharT, Traits >); - basic_string & append(const basic_string &, size_type, size_type = npos); - basic_string & append(const CharT *, size_type); - basic_string & append(const CharT *); - basic_string & append(size_type, CharT); - template<typename InputIter> basic_string & append(InputIter, InputIter); - basic_string & append(std::initializer_list< CharT >); - void push_back(CharT); - basic_string & assign(const basic_string &); + basic_string & append(BasicStringView< CharT, Traits >); + basic_string & append(const basic_string &, size_type, size_type = npos); + basic_string & append(const CharT *, size_type); + basic_string & append(const CharT *); + basic_string & append(size_type, CharT); + template<typename InputIter> basic_string & append(InputIter, InputIter); + basic_string & append(std::initializer_list< CharT >); + void push_back(CharT); + basic_string & assign(const basic_string &); template<template< class, class > class BasicStringView> - basic_string & assign(BasicStringView< CharT, Traits >); - basic_string & assign(basic_string &&) noexcept; - basic_string & assign(const basic_string &, size_type, size_type); - basic_string & assign(const CharT *, size_type); - basic_string & assign(const CharT *); - basic_string & assign(size_type, CharT); - basic_string & assign(const CharT *, const CharT *); - template<typename InputIter> basic_string & assign(InputIter, InputIter); - basic_string & assign(std::initializer_list< CharT >); - basic_string & insert(size_type, const basic_string &); + basic_string & assign(BasicStringView< CharT, Traits >); + basic_string & assign(basic_string &&) noexcept; + basic_string & assign(const basic_string &, size_type, size_type); + basic_string & assign(const CharT *, size_type); + basic_string & assign(const CharT *); + basic_string & assign(size_type, CharT); + basic_string & assign(const CharT *, const CharT *); + template<typename InputIter> basic_string & assign(InputIter, InputIter); + basic_string & assign(std::initializer_list< CharT >); + basic_string & insert(size_type, const basic_string &); basic_string & - insert(size_type, const basic_string &, size_type, size_type = npos); - basic_string & insert(size_type, const CharT *, size_type); - basic_string & insert(size_type, const CharT *); - basic_string & insert(size_type, size_type, CharT); + insert(size_type, const basic_string &, size_type, size_type = npos); + basic_string & insert(size_type, const CharT *, size_type); + basic_string & insert(size_type, const CharT *); + basic_string & insert(size_type, size_type, CharT); template<template< class, class > class BasicStringView> - basic_string & insert(size_type, BasicStringView< CharT, Traits >); - iterator insert(const_iterator, CharT); - iterator insert(const_iterator, size_type, CharT); + basic_string & insert(size_type, BasicStringView< CharT, Traits >); + iterator insert(const_iterator, CharT); + iterator insert(const_iterator, size_type, CharT); template<typename InputIter> - iterator insert(const_iterator, InputIter, InputIter); - iterator insert(const_iterator, std::initializer_list< CharT >); - void pop_back() noexcept; - basic_string & erase(size_type = 0, size_type = npos); - iterator erase(const_iterator) noexcept; - iterator erase(const_iterator, const_iterator) noexcept; - void clear() noexcept; - basic_string & replace(size_type, size_type, const basic_string &); + iterator insert(const_iterator, InputIter, InputIter); + iterator insert(const_iterator, std::initializer_list< CharT >); + void pop_back() noexcept; + basic_string & erase(size_type = 0, size_type = npos); + iterator erase(const_iterator) noexcept; + iterator erase(const_iterator, const_iterator) noexcept; + void clear() noexcept; + basic_string & replace(size_type, size_type, const basic_string &); template<template< class, class > class BasicStringView> basic_string & - replace(size_type, size_type, BasicStringView< CharT, Traits >); + replace(size_type, size_type, BasicStringView< CharT, Traits >); basic_string & - replace(size_type, size_type, const basic_string &, size_type, + replace(size_type, size_type, const basic_string &, size_type, size_type = npos); template<template< class, class > class BasicStringView> basic_string & - replace(size_type, size_type, BasicStringView< CharT, Traits >, size_type, + replace(size_type, size_type, BasicStringView< CharT, Traits >, size_type, size_type = npos); - basic_string & replace(size_type, size_type, const CharT *, size_type); - basic_string & replace(size_type, size_type, const CharT *); - basic_string & replace(size_type, size_type, size_type, CharT); - basic_string & replace(const_iterator, const_iterator, const basic_string &); + basic_string & replace(size_type, size_type, const CharT *, size_type); + basic_string & replace(size_type, size_type, const CharT *); + basic_string & replace(size_type, size_type, size_type, CharT); + basic_string & replace(const_iterator, const_iterator, const basic_string &); basic_string & - replace(const_iterator, const_iterator, const CharT *, size_type); - basic_string & replace(const_iterator, const_iterator, const CharT *); - basic_string & replace(const_iterator, const_iterator, size_type, CharT); + replace(const_iterator, const_iterator, const CharT *, size_type); + basic_string & replace(const_iterator, const_iterator, const CharT *); + basic_string & replace(const_iterator, const_iterator, size_type, CharT); template<typename InputIter> basic_string & - replace(const_iterator, const_iterator, InputIter, InputIter); + replace(const_iterator, const_iterator, InputIter, InputIter); template<template< class, class > class BasicStringView> basic_string & - replace(const_iterator, const_iterator, BasicStringView< CharT, Traits >); + replace(const_iterator, const_iterator, BasicStringView< CharT, Traits >); basic_string & - replace(const_iterator, const_iterator, std::initializer_list< CharT >); - size_type copy(CharT *, size_type, size_type = 0) const; - void swap(basic_string &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); - const CharT * c_str() const noexcept; - const CharT * data() const noexcept; - CharT * data() noexcept; + replace(const_iterator, const_iterator, std::initializer_list< CharT >); + size_type copy(CharT *, size_type, size_type = 0) const; + void swap(basic_string &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); + const CharT * c_str() const noexcept; + const CharT * data() const noexcept; + CharT * data() noexcept; template<template< class, class > class BasicStringView> - operator BasicStringView< CharT, Traits >() const noexcept; - template<typename BasicStringView> BasicStringView to_view() const noexcept; - size_type find(const basic_string &, size_type = 0) const; + operator BasicStringView< CharT, Traits >() const noexcept; + template<typename BasicStringView> BasicStringView to_view() const noexcept; + size_type find(const basic_string &, size_type = 0) const; template<template< class, class > class BasicStringView> - size_type find(BasicStringView< CharT, Traits >, size_type = 0) const; - size_type find(const CharT *, size_type, size_type) const; - size_type find(const CharT *, size_type = 0) const; - size_type find(CharT, size_type = 0) const; - size_type rfind(const basic_string &, size_type = npos) const; + size_type find(BasicStringView< CharT, Traits >, size_type = 0) const; + size_type find(const CharT *, size_type, size_type) const; + size_type find(const CharT *, size_type = 0) const; + size_type find(CharT, size_type = 0) const; + size_type rfind(const basic_string &, size_type = npos) const; template<template< class, class > class BasicStringView> - size_type rfind(BasicStringView< CharT, Traits >, size_type = npos) const; - size_type rfind(const CharT *, size_type, size_type) const; - size_type rfind(const CharT *, size_type = npos) const; - size_type rfind(CharT, size_type = npos) const; - size_type find_first_of(const basic_string &, size_type = 0) const; + size_type rfind(BasicStringView< CharT, Traits >, size_type = npos) const; + size_type rfind(const CharT *, size_type, size_type) const; + size_type rfind(const CharT *, size_type = npos) const; + size_type rfind(CharT, size_type = npos) const; + size_type find_first_of(const basic_string &, size_type = 0) const; template<template< class, class > class BasicStringView> - size_type find_first_of(BasicStringView< CharT, Traits >, size_type = 0) const; - size_type find_first_of(const CharT *, size_type, size_type) const; - size_type find_first_of(const CharT *, size_type = 0) const; - size_type find_first_of(CharT, size_type = 0) const; - size_type find_last_of(const basic_string &, size_type = npos) const; + size_type find_first_of(BasicStringView< CharT, Traits >, size_type = 0) const; + size_type find_first_of(const CharT *, size_type, size_type) const; + size_type find_first_of(const CharT *, size_type = 0) const; + size_type find_first_of(CharT, size_type = 0) const; + size_type find_last_of(const basic_string &, size_type = npos) const; template<template< class, class > class BasicStringView> - size_type find_last_of(BasicStringView< CharT, Traits >, size_type = npos) const; - size_type find_last_of(const CharT *, size_type, size_type) const; - size_type find_last_of(const CharT *, size_type = npos) const; - size_type find_last_of(CharT, size_type = npos) const; - size_type find_first_not_of(const basic_string &, size_type = 0) const; + size_type find_last_of(BasicStringView< CharT, Traits >, size_type = npos) const; + size_type find_last_of(const CharT *, size_type, size_type) const; + size_type find_last_of(const CharT *, size_type = npos) const; + size_type find_last_of(CharT, size_type = npos) const; + size_type find_first_not_of(const basic_string &, size_type = 0) const; template<template< class, class > class BasicStringView> - size_type find_first_not_of(BasicStringView< CharT, Traits >, + size_type find_first_not_of(BasicStringView< CharT, Traits >, size_type = 0) const; - size_type find_first_not_of(const CharT *, size_type, size_type) const; - size_type find_first_not_of(const CharT *, size_type = 0) const; - size_type find_first_not_of(CharT, size_type = 0) const; - size_type find_last_not_of(const basic_string &, size_type = npos) const; + size_type find_first_not_of(const CharT *, size_type, size_type) const; + size_type find_first_not_of(const CharT *, size_type = 0) const; + size_type find_first_not_of(CharT, size_type = 0) const; + size_type find_last_not_of(const basic_string &, size_type = npos) const; template<template< class, class > class BasicStringView> - size_type find_last_not_of(BasicStringView< CharT, Traits >, + size_type find_last_not_of(BasicStringView< CharT, Traits >, size_type = npos) const; - size_type find_last_not_of(const CharT *, size_type, size_type) const; - size_type find_last_not_of(const CharT *, size_type = npos) const; - size_type find_last_not_of(CharT, size_type = npos) const; - basic_string substr(size_type = 0, size_type = npos) const; - int compare(const basic_string &) const; + size_type find_last_not_of(const CharT *, size_type, size_type) const; + size_type find_last_not_of(const CharT *, size_type = npos) const; + size_type find_last_not_of(CharT, size_type = npos) const; + basic_string substr(size_type = 0, size_type = npos) const; + int compare(const basic_string &) const; template<template< class, class > class BasicStringView> - int compare(BasicStringView< CharT, Traits >) const; - int compare(size_type, size_type, const basic_string &) const; + int compare(BasicStringView< CharT, Traits >) const; + int compare(size_type, size_type, const basic_string &) const; template<template< class, class > class BasicStringView> - int compare(size_type, size_type, BasicStringView< CharT, Traits >) const; - int compare(size_type, size_type, const basic_string &, size_type, + int compare(size_type, size_type, BasicStringView< CharT, Traits >) const; + int compare(size_type, size_type, const basic_string &, size_type, size_type = npos) const; template<template< class, class > class BasicStringView> - int compare(size_type, size_type, BasicStringView< CharT, Traits >, + int compare(size_type, size_type, BasicStringView< CharT, Traits >, size_type, size_type) const; - int compare(const CharT *) const; - int compare(size_type, size_type, const CharT *, size_type) const; - int compare(size_type, size_type, const CharT *) const; + int compare(const CharT *) const; + int compare(size_type, size_type, const CharT *, size_type) const; + int compare(size_type, size_type, const CharT *) const; // public data members static const size_type npos; };
    -

    Description

    +

    Description

    The basic_string class represents a Sequence of characters. It contains all the usual operations of a Sequence, and, additionally, it contains standard string operations such as search and concatenation.

    The basic_string class is parameterized by character type, and by that type's Character Traits.

    This class has performance characteristics very much like vector<>, meaning, for example, that it does not perform reference-count or copy-on-write, and that concatenation of two strings is an O(N) operation.

    @@ -270,7 +270,7 @@

    -

    Template Parameters

    +

    Template Parameters

    1. typename CharT
      @@ -287,140 +287,140 @@
    -

    +

    basic_string public construct/copy/destruct

    1. -
      basic_string() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
      +
      basic_string() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));

      Effects: Default constructs a basic_string.

      Throws: If allocator_type's default constructor throws.

    2. -
      explicit basic_string(const allocator_type & a) noexcept;
      +
      explicit basic_string(const allocator_type & a) noexcept;

      Effects: Constructs a basic_string taking the allocator as parameter.

      Throws: Nothing

    3. -
      basic_string(const basic_string & s);
      +
      basic_string(const basic_string & s);

      Effects: Copy constructs a basic_string.

      Postcondition: x == *this.

      Throws: If allocator_type's default constructor or allocation throws.

    4. template<template< class, class > class BasicStringView> 
      -  explicit basic_string(BasicStringView< CharT, Traits > sv, 
      +  explicit basic_string(BasicStringView< CharT, Traits > sv, 
                               const Allocator & a = Allocator());

      Effects: Same as basic_string(sv.data(), sv.size(), a).

      Throws: If allocator_type's default constructor or allocation throws.

    5. -
      basic_string(basic_string && s) noexcept;
      +
      basic_string(basic_string && s) noexcept;

      Effects: Move constructor. Moves s's resources to *this.

      Throws: Nothing.

      Complexity: Constant.

    6. -
      basic_string(const basic_string & s, const allocator_type & a);
      +
      basic_string(const basic_string & s, const allocator_type & a);

      Effects: Copy constructs a basic_string using the specified allocator.

      Postcondition: x == *this.

      Throws: If allocation throws.

    7. -
      basic_string(basic_string && s, const allocator_type & a);
      +
      basic_string(basic_string && s, const allocator_type & a);

      Effects: Move constructor using the specified allocator. Moves s's resources to *this.

      Throws: If allocation throws.

      Complexity: Constant if a == s.get_allocator(), linear otherwise.

    8. -
      basic_string(const basic_string & s, size_type pos, size_type n = npos);
      +
      basic_string(const basic_string & s, size_type pos, size_type n = npos);

      Effects: Constructs a basic_string with a default-constructed allocator, and is initialized by a specific number of characters of the s string.

    9. -
      basic_string(const basic_string & s, size_type pos, size_type n, 
      +
      basic_string(const basic_string & s, size_type pos, size_type n, 
                    const allocator_type & a);

      Effects: Constructs a basic_string taking the allocator as parameter, and is initialized by a specific number of characters of the s string.

    10. -
      basic_string(const CharT * s, size_type n);
      +
      basic_string(const CharT * s, size_type n);

      Effects: Constructs a basic_string taking a default-constructed allocator, and is initialized by a specific number of characters of the s c-string.

    11. -
      basic_string(const CharT * s, size_type n, const allocator_type & a);
      +
      basic_string(const CharT * s, size_type n, const allocator_type & a);

      Effects: Constructs a basic_string taking the allocator as parameter, and is initialized by a specific number of characters of the s c-string.

    12. -
      basic_string(const CharT * s);
      +
      basic_string(const CharT * s);

      Effects: Constructs a basic_string with a default-constructed allocator, and is initialized by the null-terminated s c-string.

    13. -
      basic_string(const CharT * s, const allocator_type & a);
      +
      basic_string(const CharT * s, const allocator_type & a);

      Effects: Constructs a basic_string taking the allocator as parameter, and is initialized by the null-terminated s c-string.

    14. -
      basic_string(size_type n, CharT c);
      +
      basic_string(size_type n, CharT c);

      Effects: Constructs a basic_string with a default-constructed allocator, and is initialized by n copies of c.

    15. -
      basic_string(size_type n, CharT c, const allocator_type & a);
      +
      basic_string(size_type n, CharT c, const allocator_type & a);

      Effects: Constructs a basic_string taking the allocator as parameter, and is initialized by n copies of c.

    16. -
      basic_string(size_type n, default_init_t);
      +
      basic_string(size_type n, default_init_t);

      Effects: Constructs a basic_string with a default-constructed allocator, and is initialized by n default-initialized characters.

    17. -
      basic_string(size_type n, default_init_t, const allocator_type & a);
      +
      basic_string(size_type n, default_init_t, const allocator_type & a);

      Effects: Constructs a basic_string taking the allocator as parameter, and is initialized by n default-initialized characters.

    18. template<typename InputIterator> 
      -  basic_string(InputIterator f, InputIterator l);
      + basic_string(InputIterator f, InputIterator l);

      Effects: Constructs a basic_string with a default-constructed allocator, and a range of iterators.

    19. template<typename InputIterator> 
      -  basic_string(InputIterator f, InputIterator l, const allocator_type & a);
      + basic_string(InputIterator f, InputIterator l, const allocator_type & a);

      Effects: Constructs a basic_string taking the allocator as parameter, and a range of iterators.

    20. -
      basic_string(std::initializer_list< value_type > il, 
      +
      basic_string(std::initializer_list< value_type > il, 
                    const allocator_type & a = allocator_type());

      Effects: Same as basic_string(il.begin(), il.end(), a).

    21. -
      basic_string & operator=(const basic_string & x);
      +
      basic_string & operator=(const basic_string & x);

      Effects: Copy constructs a string.

      Postcondition: x == *this.

      Complexity: Linear to the elements x contains.

    22. basic_string & 
      -operator=(basic_string && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));
      +operator=(basic_string && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));

      Effects: Move constructor. Moves x's resources to *this.

      Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and allocation throws

      Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

    23. -
      basic_string & operator=(const CharT * s);
      +
      basic_string & operator=(const CharT * s);

      Effects: Assignment from a null-terminated c-string.

    24. -
      basic_string & operator=(CharT c);
      +
      basic_string & operator=(CharT c);

      Effects: Returns *this = basic_string(1, c).

    25. template<template< class, class > class BasicStringView> 
      -  basic_string & operator=(BasicStringView< CharT, Traits > sv);
      + basic_string & operator=(BasicStringView< CharT, Traits > sv);

      Effects: Equivalent to return assign(sv).

    26. -
      basic_string & operator=(std::initializer_list< CharT > il);
      +
      basic_string & operator=(std::initializer_list< CharT > il);

      Effects: Returns *this = basic_string(il);

    27. -
      ~basic_string();
      +
      ~basic_string();

      Effects: Destroys the basic_string. All used memory is deallocated.

      Throws: Nothing.

      Complexity: Constant.

      @@ -428,350 +428,350 @@
    -

    -basic_string public member functions

    +

    +basic_string public member functions

    1. -
      allocator_type get_allocator() const noexcept;
      +
      allocator_type get_allocator() const noexcept;

      Effects: Returns a copy of the internal allocator.

      Throws: If allocator's copy constructor throws.

      Complexity: Constant.

    2. -
      stored_allocator_type & get_stored_allocator() noexcept;
      +
      stored_allocator_type & get_stored_allocator() noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    3. -
      const stored_allocator_type & get_stored_allocator() const noexcept;
      +
      const stored_allocator_type & get_stored_allocator() const noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    4. -
      iterator begin() noexcept;
      +
      iterator begin() noexcept;

      Effects: Returns an iterator to the first element contained in the vector.

      Throws: Nothing.

      Complexity: Constant.

    5. -
      const_iterator begin() const noexcept;
      +
      const_iterator begin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the vector.

      Throws: Nothing.

      Complexity: Constant.

    6. -
      iterator end() noexcept;
      +
      iterator end() noexcept;

      Effects: Returns an iterator to the end of the vector.

      Throws: Nothing.

      Complexity: Constant.

    7. -
      const_iterator end() const noexcept;
      +
      const_iterator end() const noexcept;

      Effects: Returns a const_iterator to the end of the vector.

      Throws: Nothing.

      Complexity: Constant.

    8. -
      reverse_iterator rbegin() noexcept;
      +
      reverse_iterator rbegin() noexcept;

      Effects: Returns a reverse_iterator pointing to the beginning of the reversed vector.

      Throws: Nothing.

      Complexity: Constant.

    9. -
      const_reverse_iterator rbegin() const noexcept;
      +
      const_reverse_iterator rbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed vector.

      Throws: Nothing.

      Complexity: Constant.

    10. -
      reverse_iterator rend() noexcept;
      +
      reverse_iterator rend() noexcept;

      Effects: Returns a reverse_iterator pointing to the end of the reversed vector.

      Throws: Nothing.

      Complexity: Constant.

    11. -
      const_reverse_iterator rend() const noexcept;
      +
      const_reverse_iterator rend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed vector.

      Throws: Nothing.

      Complexity: Constant.

    12. -
      const_iterator cbegin() const noexcept;
      +
      const_iterator cbegin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the vector.

      Throws: Nothing.

      Complexity: Constant.

    13. -
      const_iterator cend() const noexcept;
      +
      const_iterator cend() const noexcept;

      Effects: Returns a const_iterator to the end of the vector.

      Throws: Nothing.

      Complexity: Constant.

    14. -
      const_reverse_iterator crbegin() const noexcept;
      +
      const_reverse_iterator crbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed vector.

      Throws: Nothing.

      Complexity: Constant.

    15. -
      const_reverse_iterator crend() const noexcept;
      +
      const_reverse_iterator crend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed vector.

      Throws: Nothing.

      Complexity: Constant.

    16. -
      bool empty() const noexcept;
      +
      bool empty() const noexcept;

      Effects: Returns true if the vector contains no elements.

      Throws: Nothing.

      Complexity: Constant.

    17. -
      size_type size() const noexcept;
      +
      size_type size() const noexcept;

      Effects: Returns the number of the elements contained in the vector.

      Throws: Nothing.

      Complexity: Constant.

    18. -
      size_type length() const noexcept;
      +
      size_type length() const noexcept;

      Effects: Returns the number of the elements contained in the vector.

      Throws: Nothing.

      Complexity: Constant.

    19. -
      size_type max_size() const noexcept;
      +
      size_type max_size() const noexcept;

      Effects: Returns the largest possible size of the vector.

      Throws: Nothing.

      Complexity: Constant.

    20. -
      void resize(size_type n, CharT c);
      +
      void resize(size_type n, CharT c);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are copy constructed from x.

      Throws: If memory allocation throws

      Complexity: Linear to the difference between size() and new_size.

    21. -
      void resize(size_type n);
      +
      void resize(size_type n);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are value initialized.

      Throws: If memory allocation throws

      Complexity: Linear to the difference between size() and new_size.

    22. -
      void resize(size_type n, default_init_t);
      +
      void resize(size_type n, default_init_t);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are uninitialized.

      Throws: If memory allocation throws

      Complexity: Linear to the difference between size() and new_size.

      Note: Non-standard extension

    23. -
      size_type capacity() const noexcept;
      +
      size_type capacity() const noexcept;

      Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

      Throws: Nothing.

      Complexity: Constant.

    24. -
      void reserve(size_type res_arg);
      +
      void reserve(size_type res_arg);

      Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

      Throws: If memory allocation allocation throws

    25. -
      void shrink_to_fit();
      +
      void shrink_to_fit();

      Effects: Tries to deallocate the excess of memory created with previous allocations. The size of the string is unchanged

      Throws: Nothing

      Complexity: Linear to size().

    26. -
      reference front() noexcept;
      +
      reference front() noexcept;

      Requires: !empty()

      Effects: Returns a reference to the first element of the container.

      Throws: Nothing.

      Complexity: Constant.

    27. -
      const_reference front() const noexcept;
      +
      const_reference front() const noexcept;

      Requires: !empty()

      Effects: Returns a const reference to the first element of the container.

      Throws: Nothing.

      Complexity: Constant.

    28. -
      reference back() noexcept;
      +
      reference back() noexcept;

      Requires: !empty()

      Effects: Returns a reference to the last element of the container.

      Throws: Nothing.

      Complexity: Constant.

    29. -
      const_reference back() const noexcept;
      +
      const_reference back() const noexcept;

      Requires: !empty()

      Effects: Returns a const reference to the last element of the container.

      Throws: Nothing.

      Complexity: Constant.

    30. -
      reference operator[](size_type n) noexcept;
      +
      reference operator[](size_type n) noexcept;

      Requires: size() > n.

      Effects: Returns a reference to the nth element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    31. -
      const_reference operator[](size_type n) const noexcept;
      +
      const_reference operator[](size_type n) const noexcept;

      Requires: size() > n.

      Effects: Returns a const reference to the nth element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    32. -
      reference at(size_type n);
      +
      reference at(size_type n);

      Requires: size() > n.

      Effects: Returns a reference to the nth element from the beginning of the container.

      Throws: std::range_error if n >= size()

      Complexity: Constant.

    33. -
      const_reference at(size_type n) const;
      +
      const_reference at(size_type n) const;

      Requires: size() > n.

      Effects: Returns a const reference to the nth element from the beginning of the container.

      Throws: std::range_error if n >= size()

      Complexity: Constant.

    34. -
      basic_string & operator+=(const basic_string & s);
      +
      basic_string & operator+=(const basic_string & s);

      Effects: Calls append(str.data, str.size()).

      Returns: *this

    35. template<template< class, class > class BasicStringView> 
      -  basic_string & operator+=(BasicStringView< CharT, Traits > sv);
      + basic_string & operator+=(BasicStringView< CharT, Traits > sv);

      Effects: Same as return append(sv).

    36. -
      basic_string & operator+=(const CharT * s);
      +
      basic_string & operator+=(const CharT * s);

      Effects: Calls append(s).

      Returns: *this

    37. -
      basic_string & operator+=(CharT c);
      +
      basic_string & operator+=(CharT c);

      Effects: Calls append(1, c).

      Returns: *this

    38. -
      basic_string & operator+=(std::initializer_list< CharT > il);
      +
      basic_string & operator+=(std::initializer_list< CharT > il);

      Effects: Returns append(il)

    39. -
      basic_string & append(const basic_string & s);
      +
      basic_string & append(const basic_string & s);

      Effects: Calls append(str.data(), str.size()).

      Returns: *this

    40. template<template< class, class > class BasicStringView> 
      -  basic_string & append(BasicStringView< CharT, Traits > sv);
      + basic_string & append(BasicStringView< CharT, Traits > sv);

      Effects: Same as return append(sv.data(), sv.size()).

    41. basic_string & 
      -append(const basic_string & s, size_type pos, size_type n = npos);
      +append(const basic_string & s, size_type pos, size_type n = npos);

      Requires: pos <= str.size()

      Effects: Determines the effective length rlen of the string to append as the smaller of n and str.size() - pos and calls append(str.data() + pos, rlen).

      Throws: If memory allocation throws and out_of_range if pos > str.size()

      Returns: *this

    42. -
      basic_string & append(const CharT * s, size_type n);
      +
      basic_string & append(const CharT * s, size_type n);

      Requires: s points to an array of at least n elements of CharT.

      Effects: The function replaces the string controlled by *this with a string of length size() + n whose irst size() elements are a copy of the original string controlled by *this and whose remaining elements are a copy of the initial n elements of s.

      Throws: If memory allocation throws length_error if size() + n > max_size().

      Returns: *this

    43. -
      basic_string & append(const CharT * s);
      +
      basic_string & append(const CharT * s);

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Effects: Calls append(s, traits::length(s)).

      Returns: *this

    44. -
      basic_string & append(size_type n, CharT c);
      +
      basic_string & append(size_type n, CharT c);

      Effects: Equivalent to append(basic_string(n, c)).

      Returns: *this

    45. template<typename InputIter> 
      -  basic_string & append(InputIter first, InputIter last);
      + basic_string & append(InputIter first, InputIter last);

      Requires: [first,last) is a valid range.

      Effects: Equivalent to append(basic_string(first, last)).

      Returns: *this

    46. -
      basic_string & append(std::initializer_list< CharT > il);
      +
      basic_string & append(std::initializer_list< CharT > il);

      Effects: Returns append(il.begin(), il.size()).

    47. -
      void push_back(CharT c);
      +
      void push_back(CharT c);

      Effects: Equivalent to append(static_cast<size_type>(1), c).

    48. -
      basic_string & assign(const basic_string & s);
      +
      basic_string & assign(const basic_string & s);

      Effects: Equivalent to assign(str, 0, npos).

      Returns: *this

    49. template<template< class, class > class BasicStringView> 
      -  basic_string & assign(BasicStringView< CharT, Traits > sv);
      + basic_string & assign(BasicStringView< CharT, Traits > sv);

      Effects: Equivalent to return assign(sv.data(), sv.size()).

      Returns: *this

    50. -
      basic_string & assign(basic_string && ms) noexcept;
      +
      basic_string & assign(basic_string && ms) noexcept;

      Effects: The function replaces the string controlled by *this with a string of length str.size() whose elements are a copy of the string controlled by str. Leaves str in a valid but unspecified state.

      Throws: Nothing

      Returns: *this

    51. -
      basic_string & assign(const basic_string & s, size_type pos, size_type n);
      +
      basic_string & assign(const basic_string & s, size_type pos, size_type n);

      Requires: pos <= str.size()

      Effects: Determines the effective length rlen of the string to assign as the smaller of n and str.size() - pos and calls assign(str.data() + pos rlen).

      Throws: If memory allocation throws or out_of_range if pos > str.size().

      Returns: *this

    52. -
      basic_string & assign(const CharT * s, size_type n);
      +
      basic_string & assign(const CharT * s, size_type n);

      Requires: s points to an array of at least n elements of CharT.

      Effects: Replaces the string controlled by *this with a string of length n whose elements are a copy of those pointed to by s.

      Throws: If memory allocation throws or length_error if n > max_size().

      Returns: *this

    53. -
      basic_string & assign(const CharT * s);
      +
      basic_string & assign(const CharT * s);

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Effects: Calls assign(s, traits::length(s)).

      Returns: *this

    54. -
      basic_string & assign(size_type n, CharT c);
      +
      basic_string & assign(size_type n, CharT c);

      Effects: Equivalent to assign(basic_string(n, c)).

      Returns: *this

    55. -
      basic_string & assign(const CharT * first, const CharT * last);
      +
      basic_string & assign(const CharT * first, const CharT * last);

      Effects: Equivalent to assign(basic_string(first, last)). Returns: *this

    56. template<typename InputIter> 
      -  basic_string & assign(InputIter first, InputIter last);
      + basic_string & assign(InputIter first, InputIter last);

      Effects: Equivalent to assign(basic_string(first, last)).

      Returns: *this

    57. -
      basic_string & assign(std::initializer_list< CharT > il);
      +
      basic_string & assign(std::initializer_list< CharT > il);

      Effects: Returns assign(il.begin(), il.size()).

    58. -
      basic_string & insert(size_type pos, const basic_string & s);
      +
      basic_string & insert(size_type pos, const basic_string & s);

      Requires: pos <= size().

      Effects: Calls insert(pos, str.data(), str.size()).

      Throws: If memory allocation throws or out_of_range if pos > size().

      @@ -779,7 +779,7 @@
    59. basic_string & 
      -insert(size_type pos1, const basic_string & s, size_type pos2, 
      +insert(size_type pos1, const basic_string & s, size_type pos2, 
              size_type n = npos);

      Requires: pos1 <= size() and pos2 <= str.size()

      Effects: Determines the effective length rlen of the string to insert as the smaller of n and str.size() - pos2 and calls insert(pos1, str.data() + pos2, rlen).

      @@ -787,88 +787,88 @@

      Returns: *this

    60. -
      basic_string & insert(size_type pos, const CharT * s, size_type n);
      +
      basic_string & insert(size_type pos, const CharT * s, size_type n);

      Requires: s points to an array of at least n elements of CharT and pos <= size().

      Effects: Replaces the string controlled by *this with a string of length size() + n whose first pos elements are a copy of the initial elements of the original string controlled by *this and whose next n elements are a copy of the elements in s and whose remaining elements are a copy of the remaining elements of the original string controlled by *this.

      Throws: If memory allocation throws, out_of_range if pos > size() or length_error if size() + n > max_size().

      Returns: *this

    61. -
      basic_string & insert(size_type pos, const CharT * s);
      +
      basic_string & insert(size_type pos, const CharT * s);

      Requires: pos <= size() and s points to an array of at least traits::length(s) + 1 elements of CharT

      Effects: Calls insert(pos, s, traits::length(s)).

      Throws: If memory allocation throws, out_of_range if pos > size() length_error if size() > max_size() - Traits::length(s)

      Returns: *this

    62. -
      basic_string & insert(size_type pos, size_type n, CharT c);
      +
      basic_string & insert(size_type pos, size_type n, CharT c);

      Effects: Equivalent to insert(pos, basic_string(n, c)).

      Throws: If memory allocation throws, out_of_range if pos > size() length_error if size() > max_size() - n

      Returns: *this

    63. template<template< class, class > class BasicStringView> 
      -  basic_string & insert(size_type pos, BasicStringView< CharT, Traits > sv);
      + basic_string & insert(size_type pos, BasicStringView< CharT, Traits > sv);

      Effects: Same as return insert(pos, sv.data(), sv.size()).

    64. -
      iterator insert(const_iterator p, CharT c);
      +
      iterator insert(const_iterator p, CharT c);

      Requires: p is a valid iterator on *this.

      Effects: inserts a copy of c before the character referred to by p.

      Returns: An iterator which refers to the copy of the inserted character.

    65. -
      iterator insert(const_iterator p, size_type n, CharT c);
      +
      iterator insert(const_iterator p, size_type n, CharT c);

      Requires: p is a valid iterator on *this.

      Effects: Inserts n copies of c before the character referred to by p.

      Returns: an iterator to the first inserted element or p if n is 0.

    66. template<typename InputIter> 
      -  iterator insert(const_iterator p, InputIter first, InputIter last);
      + iterator insert(const_iterator p, InputIter first, InputIter last);

      Requires: p is a valid iterator on *this. [first,last) is a valid range.

      Effects: Equivalent to insert(p - begin(), basic_string(first, last)).

      Returns: an iterator to the first inserted element or p if first == last.

    67. -
      iterator insert(const_iterator p, std::initializer_list< CharT > il);
      +
      iterator insert(const_iterator p, std::initializer_list< CharT > il);

      Effects: As if by insert(p, il.begin(), il.end()).

      Returns: An iterator which refers to the copy of the first inserted character, or p if i1 is empty.

    68. -
      void pop_back() noexcept;
      +
      void pop_back() noexcept;

      Effects: Removes the last element from the container.

      Throws: Nothing.

      Complexity: Constant time.

    69. -
      basic_string & erase(size_type pos = 0, size_type n = npos);
      +
      basic_string & erase(size_type pos = 0, size_type n = npos);

      Requires: pos <= size()

      Effects: Determines the effective length xlen of the string to be removed as the smaller of n and size() - pos. The function then replaces the string controlled by *this with a string of length size() - xlen whose first pos elements are a copy of the initial elements of the original string controlled by *this, and whose remaining elements are a copy of the elements of the original string controlled by *this beginning at position pos + xlen.

      Throws: out_of_range if pos > size().

      Returns: *this

    70. -
      iterator erase(const_iterator p) noexcept;
      +
      iterator erase(const_iterator p) noexcept;

      Effects: Removes the character referred to by p.

      Throws: Nothing

      Returns: An iterator which points to the element immediately following p prior to the element being erased. If no such element exists, end() is returned.

    71. -
      iterator erase(const_iterator first, const_iterator last) noexcept;
      +
      iterator erase(const_iterator first, const_iterator last) noexcept;

      Requires: first and last are valid iterators on *this, defining a range [first,last).

      Effects: Removes the characters in the range [first,last).

      Throws: Nothing

      Returns: An iterator which points to the element pointed to by last prior to the other elements being erased. If no such element exists, end() is returned.

    72. -
      void clear() noexcept;
      +
      void clear() noexcept;

      Effects: Erases all the elements of the vector.

      Throws: Nothing.

      Complexity: Linear to the number of elements in the vector.

    73. -
      basic_string & replace(size_type pos1, size_type n1, const basic_string & str);
      +
      basic_string & replace(size_type pos1, size_type n1, const basic_string & str);

      Requires: pos1 <= size().

      Effects: Calls replace(pos1, n1, str.data(), str.size()).

      Throws: if memory allocation throws or out_of_range if pos1 > size().

      @@ -877,12 +877,12 @@
    74. template<template< class, class > class BasicStringView> 
         basic_string & 
      -  replace(size_type pos1, size_type n1, BasicStringView< CharT, Traits > sv);
      + replace(size_type pos1, size_type n1, BasicStringView< CharT, Traits > sv);

      Effects: Calls return replace(pos1, n1, sv.data(), sv.size());.

    75. basic_string & 
      -replace(size_type pos1, size_type n1, const basic_string & str, 
      +replace(size_type pos1, size_type n1, const basic_string & str, 
               size_type pos2, size_type n2 = npos);

      Requires: pos1 <= size() and pos2 <= str.size().

      Effects: Determines the effective length rlen of the string to be inserted as the smaller of n2 and str.size() - pos2 and calls replace(pos1, n1, str.data() + pos2, rlen).

      @@ -892,7 +892,7 @@
    76. template<template< class, class > class BasicStringView> 
         basic_string & 
      -  replace(size_type pos1, size_type n1, BasicStringView< CharT, Traits > sv, 
      +  replace(size_type pos1, size_type n1, BasicStringView< CharT, Traits > sv, 
                 size_type pos2, size_type n2 = npos);

      Throws: out_of_range if pos1 > size() or pos2 > sv.size().

      Effects: Determines the effective length rlen of the string to be inserted as the smaller of n2 and sv.size() - pos2 and calls replace(pos1, n1, sv.data() + pos2, rlen).

      @@ -900,21 +900,21 @@
    77. basic_string & 
      -replace(size_type pos1, size_type n1, const CharT * s, size_type n2);
      +replace(size_type pos1, size_type n1, const CharT * s, size_type n2);

      Requires: pos1 <= size() and s points to an array of at least n2 elements of CharT.

      Effects: Determines the effective length xlen of the string to be removed as the smaller of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error. Otherwise, the function replaces the string controlled by *this with a string of length size() - xlen + n2 whose first pos1 elements are a copy of the initial elements of the original string controlled by *this, whose next n2 elements are a copy of the initial n2 elements of s, and whose remaining elements are a copy of the elements of the original string controlled by *this beginning at position pos + xlen.

      Throws: if memory allocation throws, out_of_range if pos1 > size() or length_error if the length of the resulting string would exceed max_size()

      Returns: *this

    78. -
      basic_string & replace(size_type pos, size_type n1, const CharT * s);
      +
      basic_string & replace(size_type pos, size_type n1, const CharT * s);

      Requires: pos1 <= size() and s points to an array of at least n2 elements of CharT.

      Effects: Determines the effective length xlen of the string to be removed as the smaller of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error. Otherwise, the function replaces the string controlled by *this with a string of length size() - xlen + n2 whose first pos1 elements are a copy of the initial elements of the original string controlled by *this, whose next n2 elements are a copy of the initial n2 elements of s, and whose remaining elements are a copy of the elements of the original string controlled by *this beginning at position pos + xlen.

      Throws: if memory allocation throws, out_of_range if pos1 > size() or length_error if the length of the resulting string would exceed max_size()

      Returns: *this

    79. -
      basic_string & replace(size_type pos1, size_type n1, size_type n2, CharT c);
      +
      basic_string & replace(size_type pos1, size_type n1, size_type n2, CharT c);

      Requires: pos1 <= size().

      Effects: Equivalent to replace(pos1, n1, basic_string(n2, c)).

      Throws: if memory allocation throws, out_of_range if pos1 > size() or length_error if the length of the resulting string would exceed max_size()

      @@ -922,7 +922,7 @@
    80. basic_string & 
      -replace(const_iterator i1, const_iterator i2, const basic_string & str);
      +replace(const_iterator i1, const_iterator i2, const basic_string & str);

      Requires: [begin(),i1) and [i1,i2) are valid ranges.

      Effects: Calls replace(i1 - begin(), i2 - i1, str).

      Throws: if memory allocation throws

      @@ -930,14 +930,14 @@
    81. basic_string & 
      -replace(const_iterator i1, const_iterator i2, const CharT * s, size_type n);
      +replace(const_iterator i1, const_iterator i2, const CharT * s, size_type n);

      Requires: [begin(),i1) and [i1,i2) are valid ranges and s points to an array of at least n elements

      Effects: Calls replace(i1 - begin(), i2 - i1, s, n).

      Throws: if memory allocation throws

      Returns: *this

    82. -
      basic_string & replace(const_iterator i1, const_iterator i2, const CharT * s);
      +
      basic_string & replace(const_iterator i1, const_iterator i2, const CharT * s);

      Requires: [begin(),i1) and [i1,i2) are valid ranges and s points to an array of at least traits::length(s) + 1 elements of CharT.

      Effects: Calls replace(i1 - begin(), i2 - i1, s, traits::length(s)).

      Throws: if memory allocation throws

      @@ -945,7 +945,7 @@
    83. basic_string & 
      -replace(const_iterator i1, const_iterator i2, size_type n, CharT c);
      +replace(const_iterator i1, const_iterator i2, size_type n, CharT c);

      Requires: [begin(),i1) and [i1,i2) are valid ranges.

      Effects: Calls replace(i1 - begin(), i2 - i1, basic_string(n, c)).

      Throws: if memory allocation throws

      @@ -954,7 +954,7 @@
    84. template<typename InputIter> 
         basic_string & 
      -  replace(const_iterator i1, const_iterator i2, InputIter j1, InputIter j2);
      + replace(const_iterator i1, const_iterator i2, InputIter j1, InputIter j2);

      Requires: [begin(),i1), [i1,i2) and [j1,j2) are valid ranges.

      Effects: Calls replace(i1 - begin(), i2 - i1, basic_string(j1, j2)).

      Throws: if memory allocation throws

      @@ -963,7 +963,7 @@
    85. template<template< class, class > class BasicStringView> 
         basic_string & 
      -  replace(const_iterator i1, const_iterator i2, 
      +  replace(const_iterator i1, const_iterator i2, 
                 BasicStringView< CharT, Traits > sv);

      Requires: [begin(), i1) and [i1, i2) are valid ranges.

      Effects: Calls replace(i1 - begin(), i2 - i1, sv)..

      @@ -971,259 +971,259 @@
    86. basic_string & 
      -replace(const_iterator i1, const_iterator i2, 
      +replace(const_iterator i1, const_iterator i2, 
               std::initializer_list< CharT > il);

      Requires: [begin(), i1) and [i1, i2) are valid ranges.

      Effects: Calls replace(i1 - begin(), i2 - i1, il.begin(), il.size()).

      Returns: *this.

    87. -
      size_type copy(CharT * s, size_type n, size_type pos = 0) const;
      +
      size_type copy(CharT * s, size_type n, size_type pos = 0) const;

      Requires: pos <= size()

      Effects: Determines the effective length rlen of the string to copy as the smaller of n and size() - pos. s shall designate an array of at least rlen elements. The function then replaces the string designated by s with a string of length rlen whose elements are a copy of the string controlled by *this beginning at position pos. The function does not append a null object to the string designated by s.

      Throws: if memory allocation throws, out_of_range if pos > size().

      Returns: rlen

    88. -
      void swap(basic_string & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));
      +
      void swap(basic_string & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));

      Effects: *this contains the same sequence of characters that was in s, s contains the same sequence of characters that was in *this.

      Throws: Nothing

    89. -
      const CharT * c_str() const noexcept;
      +
      const CharT * c_str() const noexcept;

      Requires: The program shall not alter any of the values stored in the character array.

      Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].

      Complexity: constant time.

    90. -
      const CharT * data() const noexcept;
      +
      const CharT * data() const noexcept;

      Requires: The program shall not alter any of the values stored in the character array.

      Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].

      Complexity: constant time.

    91. -
      CharT * data() noexcept;
      +
      CharT * data() noexcept;

      Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].

      Complexity: constant time.

    92. template<template< class, class > class BasicStringView> 
      -  operator BasicStringView< CharT, Traits >() const noexcept;
      + operator BasicStringView< CharT, Traits >() const noexcept;

      Returns: a string_view to the characters in the string.

      Complexity: constant time.

    93. -
      template<typename BasicStringView> BasicStringView to_view() const noexcept;
      +
      template<typename BasicStringView> BasicStringView to_view() const noexcept;

      Returns: a string_view to the characters in the string.

      Complexity: constant time.

      Note: This function is available to write portable code for compilers that don't support templated conversion operators.

    94. -
      size_type find(const basic_string & s, size_type pos = 0) const;
      +
      size_type find(const basic_string & s, size_type pos = 0) const;

      Effects: Determines the lowest position xpos, if possible, such that both of the following conditions hold: 1) pos <= xpos and xpos + str.size() <= size(); 2) traits::eq(at(xpos+I), str.at(I)) for all elements I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    95. template<template< class, class > class BasicStringView> 
      -  size_type find(BasicStringView< CharT, Traits > sv, size_type pos = 0) const;
      + size_type find(BasicStringView< CharT, Traits > sv, size_type pos = 0) const;

      Effects: Determines the lowest position xpos, if possible, such that both of the following conditions hold: 1) pos <= xpos and xpos + sv.size() <= size(); 2) traits::eq(at(xpos+I), sv.at(I)) for all elements I of the string controlled by sv.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    96. -
      size_type find(const CharT * s, size_type pos, size_type n) const;
      +
      size_type find(const CharT * s, size_type pos, size_type n) const;

      Requires: s points to an array of at least n elements of CharT.

      Throws: Nothing

      Returns: find(basic_string<CharT,traits,Allocator>(s,n),pos).

    97. -
      size_type find(const CharT * s, size_type pos = 0) const;
      +
      size_type find(const CharT * s, size_type pos = 0) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find(basic_string(s), pos).

    98. -
      size_type find(CharT c, size_type pos = 0) const;
      +
      size_type find(CharT c, size_type pos = 0) const;

      Throws: Nothing

      Returns: find(basic_string<CharT,traits,Allocator>(1,c), pos).

    99. -
      size_type rfind(const basic_string & str, size_type pos = npos) const;
      +
      size_type rfind(const basic_string & str, size_type pos = npos) const;

      Effects: Determines the highest position xpos, if possible, such that both of the following conditions obtain: a) xpos <= pos and xpos + str.size() <= size(); b) traits::eq(at(xpos+I), str.at(I)) for all elements I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    100. template<template< class, class > class BasicStringView> 
      -  size_type rfind(BasicStringView< CharT, Traits > sv, size_type pos = npos) const;
      + size_type rfind(BasicStringView< CharT, Traits > sv, size_type pos = npos) const;

      Effects: Determines the highest position xpos, if possible, such that both of the following conditions obtain: a) xpos <= pos and xpos + sv.size() <= size(); b) traits::eq(at(xpos+I), sv.at(I)) for all elements I of the string controlled by sv.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    101. -
      size_type rfind(const CharT * s, size_type pos, size_type n) const;
      +
      size_type rfind(const CharT * s, size_type pos, size_type n) const;

      Requires: s points to an array of at least n elements of CharT.

      Throws: Nothing

      Returns: rfind(basic_string(s, n), pos).

    102. -
      size_type rfind(const CharT * s, size_type pos = npos) const;
      +
      size_type rfind(const CharT * s, size_type pos = npos) const;

      Requires: pos <= size() and s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: rfind(basic_string(s), pos).

    103. -
      size_type rfind(CharT c, size_type pos = npos) const;
      +
      size_type rfind(CharT c, size_type pos = npos) const;

      Throws: Nothing

      Returns: rfind(basic_string<CharT,traits,Allocator>(1,c),pos).

    104. -
      size_type find_first_of(const basic_string & str, size_type pos = 0) const;
      +
      size_type find_first_of(const basic_string & str, size_type pos = 0) const;

      Effects: Determines the lowest position xpos, if possible, such that both of the following conditions obtain: a) pos <= xpos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    105. template<template< class, class > class BasicStringView> 
      -  size_type find_first_of(BasicStringView< CharT, Traits > sv, 
      +  size_type find_first_of(BasicStringView< CharT, Traits > sv, 
                                 size_type pos = 0) const;

      Effects: Determines the lowest position xpos, if possible, such that both of the following conditions obtain: a) pos <= xpos and xpos < size(); b) traits::eq(at(xpos), sv.at(I)) for some element I of the string controlled by sv.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    106. -
      size_type find_first_of(const CharT * s, size_type pos, size_type n) const;
      +
      size_type find_first_of(const CharT * s, size_type pos, size_type n) const;

      Requires: s points to an array of at least n elements of CharT.

      Throws: Nothing

      Returns: find_first_of(basic_string(s, n), pos).

    107. -
      size_type find_first_of(const CharT * s, size_type pos = 0) const;
      +
      size_type find_first_of(const CharT * s, size_type pos = 0) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find_first_of(basic_string(s), pos).

    108. -
      size_type find_first_of(CharT c, size_type pos = 0) const;
      +
      size_type find_first_of(CharT c, size_type pos = 0) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find_first_of(basic_string<CharT,traits,Allocator>(1,c), pos).

    109. -
      size_type find_last_of(const basic_string & str, size_type pos = npos) const;
      +
      size_type find_last_of(const basic_string & str, size_type pos = npos) const;

      Effects: Determines the highest position xpos, if possible, such that both of the following conditions obtain: a) xpos <= pos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    110. template<template< class, class > class BasicStringView> 
      -  size_type find_last_of(BasicStringView< CharT, Traits > sv, 
      +  size_type find_last_of(BasicStringView< CharT, Traits > sv, 
                                size_type pos = npos) const;

      Effects: Determines the highest position xpos, if possible, such that both of the following conditions obtain: a) xpos <= pos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    111. -
      size_type find_last_of(const CharT * s, size_type pos, size_type n) const;
      +
      size_type find_last_of(const CharT * s, size_type pos, size_type n) const;

      Requires: s points to an array of at least n elements of CharT.

      Throws: Nothing

      Returns: find_last_of(basic_string(s, n), pos).

    112. -
      size_type find_last_of(const CharT * s, size_type pos = npos) const;
      +
      size_type find_last_of(const CharT * s, size_type pos = npos) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find_last_of(basic_string<CharT,traits,Allocator>(1,c),pos).

    113. -
      size_type find_last_of(CharT c, size_type pos = npos) const;
      +
      size_type find_last_of(CharT c, size_type pos = npos) const;

      Throws: Nothing

      Returns: find_last_of(basic_string(s), pos).

    114. -
      size_type find_first_not_of(const basic_string & str, size_type pos = 0) const;
      +
      size_type find_first_not_of(const basic_string & str, size_type pos = 0) const;

      Effects: Determines the lowest position xpos, if possible, such that both of the following conditions obtain: a) pos <= xpos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for no element I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    115. template<template< class, class > class BasicStringView> 
      -  size_type find_first_not_of(BasicStringView< CharT, Traits > sv, 
      +  size_type find_first_not_of(BasicStringView< CharT, Traits > sv, 
                                     size_type pos = 0) const;

      Effects: Determines the lowest position xpos, if possible, such that both of the following conditions obtain: a) pos <= xpos and xpos < size(); b) traits::eq(at(xpos), sv.at(I)) for no element I of the string controlled by sv.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    116. -
      size_type find_first_not_of(const CharT * s, size_type pos, size_type n) const;
      +
      size_type find_first_not_of(const CharT * s, size_type pos, size_type n) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find_first_not_of(basic_string(s, n), pos).

    117. -
      size_type find_first_not_of(const CharT * s, size_type pos = 0) const;
      +
      size_type find_first_not_of(const CharT * s, size_type pos = 0) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find_first_not_of(basic_string(s), pos).

    118. -
      size_type find_first_not_of(CharT c, size_type pos = 0) const;
      +
      size_type find_first_not_of(CharT c, size_type pos = 0) const;

      Throws: Nothing

      Returns: find_first_not_of(basic_string(1, c), pos).

    119. -
      size_type find_last_not_of(const basic_string & str, size_type pos = npos) const;
      +
      size_type find_last_not_of(const basic_string & str, size_type pos = npos) const;

      Effects: Determines the highest position xpos, if possible, such that both of the following conditions obtain: a) xpos <= pos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for no element I of the string controlled by str.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    120. template<template< class, class > class BasicStringView> 
      -  size_type find_last_not_of(BasicStringView< CharT, Traits > sv, 
      +  size_type find_last_not_of(BasicStringView< CharT, Traits > sv, 
                                    size_type pos = npos) const;

      Effects: Determines the highest position xpos, if possible, such that both of the following conditions obtain: a) xpos <= pos and xpos < size(); b) traits::eq(at(xpos), sv.at(I)) for no element I of the string controlled by sv.

      Throws: Nothing

      Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.

    121. -
      size_type find_last_not_of(const CharT * s, size_type pos, size_type n) const;
      +
      size_type find_last_not_of(const CharT * s, size_type pos, size_type n) const;

      Requires: s points to an array of at least n elements of CharT.

      Throws: Nothing

      Returns: find_last_not_of(basic_string(s, n), pos).

    122. -
      size_type find_last_not_of(const CharT * s, size_type pos = npos) const;
      +
      size_type find_last_not_of(const CharT * s, size_type pos = npos) const;

      Requires: s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: Nothing

      Returns: find_last_not_of(basic_string(s), pos).

    123. -
      size_type find_last_not_of(CharT c, size_type pos = npos) const;
      +
      size_type find_last_not_of(CharT c, size_type pos = npos) const;

      Throws: Nothing

      Returns: find_last_not_of(basic_string(1, c), pos).

    124. -
      basic_string substr(size_type pos = 0, size_type n = npos) const;
      +
      basic_string substr(size_type pos = 0, size_type n = npos) const;

      Requires: Requires: pos <= size()

      Effects: Determines the effective length rlen of the string to copy as the smaller of n and size() - pos.

      Throws: If memory allocation throws or out_of_range if pos > size().

      Returns: basic_string<CharT,traits,Allocator>(data()+pos,rlen).

    125. -
      int compare(const basic_string & str) const;
      +
      int compare(const basic_string & str) const;

      Effects: Determines the effective length rlen of the string to compare as the smaller of size() and str.size(). The function then compares the two strings by calling traits::compare(data(), str.data(), rlen).

      Throws: Nothing

      Returns: The nonzero result if the result of the comparison is nonzero. Otherwise, returns a value < 0 if size() < str.size(), a 0 value if size() == str.size(), and value > 0 if size() > str.size()

    126. template<template< class, class > class BasicStringView> 
      -  int compare(BasicStringView< CharT, Traits > sv) const;
      + int compare(BasicStringView< CharT, Traits > sv) const;

      Throws: Nothing

      Returns: compare(basic_string(sv)).

    127. -
      int compare(size_type pos1, size_type n1, const basic_string & str) const;
      +
      int compare(size_type pos1, size_type n1, const basic_string & str) const;

      Requires: pos1 <= size()

      Effects: Determines the effective length rlen of the string to compare as the smaller of (this->size() - pos1), n1 and str.size(). The function then compares the two strings by calling traits::compare(data()+pos1, str.data(), rlen).

      Throws: out_of_range if pos1 > size()

      @@ -1231,14 +1231,14 @@
    128. template<template< class, class > class BasicStringView> 
      -  int compare(size_type pos1, size_type n1, 
      +  int compare(size_type pos1, size_type n1, 
                     BasicStringView< CharT, Traits > sv) const;

      Requires: pos1 <= size()

      Throws: out_of_range if pos1 > size()

      Returns:basic_string(*this,pos1,n1).compare(sv).

    129. -
      int compare(size_type pos1, size_type n1, const basic_string & str, 
      +
      int compare(size_type pos1, size_type n1, const basic_string & str, 
                   size_type pos2, size_type n2 = npos) const;

      Requires: pos1 <= size() and pos2 <= str.size()

      Effects: Determines the effective length rlen of the string to copy as the smaller of

      @@ -1247,7 +1247,7 @@
    130. template<template< class, class > class BasicStringView> 
      -  int compare(size_type pos1, size_type n1, 
      +  int compare(size_type pos1, size_type n1, 
                     BasicStringView< CharT, Traits > sv, size_type pos2, 
                     size_type n2) const;

      Requires: pos1 <= size() and pos2 <= str.size()

      @@ -1256,18 +1256,18 @@

      Returns: basic_string(*this, pos1, n1).compare(BasicStringView<CharT, Traits>(sv, pos2, n2)).

    131. -
      int compare(const CharT * s) const;
      +
      int compare(const CharT * s) const;

      Throws: Nothing

      Returns: compare(basic_string(s)).

    132. -
      int compare(size_type pos1, size_type n1, const CharT * s, size_type n2) const;
      +
      int compare(size_type pos1, size_type n1, const CharT * s, size_type n2) const;

      Requires: pos1 > size() and s points to an array of at least n2 elements of CharT.

      Throws: out_of_range if pos1 > size()

      Returns: basic_string(*this, pos, n1).compare(basic_string(s, n2)).

    133. -
      int compare(size_type pos1, size_type n1, const CharT * s) const;
      +
      int compare(size_type pos1, size_type n1, const CharT * s) const;

      Requires: pos1 > size() and s points to an array of at least traits::length(s) + 1 elements of CharT.

      Throws: out_of_range if pos1 > size()

      Returns: basic_string(*this, pos, n1).compare(basic_string(s, n2)).

      @@ -1286,7 +1286,7 @@
      -PrevUpHomeNext +PrevUpHomeNext
      diff --git a/doc/html/boost/container/constructible__idp46140928.html b/doc/html/boost/container/constructible__idp46140928.html deleted file mode 100644 index 9da519c517..0000000000 --- a/doc/html/boost/container/constructible__idp46140928.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - -Struct template constructible_with_allocator_suffix - - - - - - - - - - - - - - - -
      Boost C++ LibrariesHomeLibrariesPeopleFAQMore
      -
      -
      -PrevUpHomeNext -
      -
      -
      -
      -

      Struct template constructible_with_allocator_suffix

      -

      boost::container::constructible_with_allocator_suffix

      -
      -

      Synopsis

      -
      // In header: <boost/container/uses_allocator.hpp>
      -
      -template<typename T> 
      -struct constructible_with_allocator_suffix {
      -
      -  // public data members
      -  static const bool value;
      -};
      -
      -

      Description

      -

      Remark: if a specialization constructible_with_allocator_suffix<X>::value is true, indicates that T may be constructed with an allocator as its last constructor argument. Ideally, all constructors of T (including the copy and move constructors) should have a variant that accepts a final argument of allocator_type.

      -

      Requires: if a specialization constructible_with_allocator_suffix<X>::value is true, T must have a nested type, allocator_type and at least one constructor for which allocator_type is the last parameter. If not all constructors of T can be called with a final allocator_type argument, and if T is used in a context where a container must call such a constructor, then the program is ill-formed.

      -

      template <class T, class Allocator = allocator<T> > class Z { public: typedef Allocator allocator_type;

      -

      // Default constructor with optional allocator suffix Z(const allocator_type& a = allocator_type());

      -

      // Copy constructor and allocator-extended copy constructor Z(const Z& zz); Z(const Z& zz, const allocator_type& a); };

      -

      // Specialize trait for class template Z template <class T, class Allocator = allocator<T> > struct constructible_with_allocator_suffix<Z<T,Allocator> > { static const bool value = true; };

      -

      Note: This trait is a workaround inspired by "N2554: The Scoped A Model (Rev 2)" (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments. Applications aiming portability with several compilers should always define this trait.

      -

      In conforming C++11 compilers or compilers supporting SFINAE expressions (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used to detect if a type should be constructed with suffix or prefix allocator arguments.

      -
      -
      - - - -
      -
      -
      -PrevUpHomeNext -
      - - diff --git a/doc/html/boost/container/constructible__idp46150320.html b/doc/html/boost/container/constructible__idp46150320.html deleted file mode 100644 index 971d5a8458..0000000000 --- a/doc/html/boost/container/constructible__idp46150320.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - -Struct template constructible_with_allocator_prefix - - - - - - - - - - - - - - - -
      Boost C++ LibrariesHomeLibrariesPeopleFAQMore
      -
      -
      -PrevUpHomeNext -
      -
      -
      -
      -

      Struct template constructible_with_allocator_prefix

      -

      boost::container::constructible_with_allocator_prefix

      -
      -

      Synopsis

      -
      // In header: <boost/container/uses_allocator.hpp>
      -
      -template<typename T> 
      -struct constructible_with_allocator_prefix {
      -
      -  // public data members
      -  static const bool value;
      -};
      -
      -

      Description

      -

      Remark: if a specialization constructible_with_allocator_prefix<X>::value is true, indicates that T may be constructed with allocator_arg and T::allocator_type as its first two constructor arguments. Ideally, all constructors of T (including the copy and move constructors) should have a variant that accepts these two initial arguments.

      -

      Requires: specialization constructible_with_allocator_prefix<X>::value is true, T must have a nested type, allocator_type and at least one constructor for which allocator_arg_t is the first parameter and allocator_type is the second parameter. If not all constructors of T can be called with these initial arguments, and if T is used in a context where a container must call such a constructor, then the program is ill-formed.

      -

      template <class T, class Allocator = allocator<T> > class Y { public: typedef Allocator allocator_type;

      -

      // Default constructor with and allocator-extended default constructor Y(); Y(allocator_arg_t, const allocator_type& a);

      -

      // Copy constructor and allocator-extended copy constructor Y(const Y& yy); Y(allocator_arg_t, const allocator_type& a, const Y& yy);

      -

      // Variadic constructor and allocator-extended variadic constructor template<class ...Args> Y(Args&& args...); template<class ...Args> Y(allocator_arg_t, const allocator_type& a, BOOST_FWD_REF(Args)... args); };

      -

      // Specialize trait for class template Y template <class T, class Allocator = allocator<T> > struct constructible_with_allocator_prefix<Y<T,Allocator> > { static const bool value = true; };

      -

      -

      Note: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)" (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments. Applications aiming portability with several compilers should always define this trait.

      -

      In conforming C++11 compilers or compilers supporting SFINAE expressions (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used to detect if a type should be constructed with suffix or prefix allocator arguments.

      -
      -
      - - - -
      -
      -
      -PrevUpHomeNext -
      - - diff --git a/doc/html/boost/container/constructible__idp67492240.html b/doc/html/boost/container/constructible__idp67492240.html new file mode 100644 index 0000000000..9d55b5baf4 --- /dev/null +++ b/doc/html/boost/container/constructible__idp67492240.html @@ -0,0 +1,66 @@ + + + + +Struct template constructible_with_allocator_suffix + + + + + + + + + + + + + + + +
      Boost C++ LibrariesHomeLibrariesPeopleFAQMore
      +
      +
      +PrevUpHomeNext +
      +
      +
      +
      +

      Struct template constructible_with_allocator_suffix

      +

      boost::container::constructible_with_allocator_suffix

      +
      +

      Synopsis

      +
      // In header: <boost/container/uses_allocator.hpp>
      +
      +template<typename T> 
      +struct constructible_with_allocator_suffix {
      +
      +  // public data members
      +  static const bool value;
      +};
      +
      +

      Description

      +

      Remark: if a specialization constructible_with_allocator_suffix<X>::value is true, indicates that T may be constructed with an allocator as its last constructor argument. Ideally, all constructors of T (including the copy and move constructors) should have a variant that accepts a final argument of allocator_type.

      +

      Requires: if a specialization constructible_with_allocator_suffix<X>::value is true, T must have a nested type, allocator_type and at least one constructor for which allocator_type is the last parameter. If not all constructors of T can be called with a final allocator_type argument, and if T is used in a context where a container must call such a constructor, then the program is ill-formed.

      +

      template <class T, class Allocator = allocator<T> > class Z { public: typedef Allocator allocator_type;

      +

      // Default constructor with optional allocator suffix Z(const allocator_type& a = allocator_type());

      +

      // Copy constructor and allocator-extended copy constructor Z(const Z& zz); Z(const Z& zz, const allocator_type& a); };

      +

      // Specialize trait for class template Z template <class T, class Allocator = allocator<T> > struct constructible_with_allocator_suffix<Z<T,Allocator> > { static const bool value = true; };

      +

      Note: This trait is a workaround inspired by "N2554: The Scoped A Model (Rev 2)" (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments. Applications aiming portability with several compilers should always define this trait.

      +

      In conforming C++11 compilers or compilers supporting SFINAE expressions (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used to detect if a type should be constructed with suffix or prefix allocator arguments.

      +
      +
      + + + +
      +
      +
      +PrevUpHomeNext +
      + + diff --git a/doc/html/boost/container/constructible__idp67501632.html b/doc/html/boost/container/constructible__idp67501632.html new file mode 100644 index 0000000000..3ffa4b3079 --- /dev/null +++ b/doc/html/boost/container/constructible__idp67501632.html @@ -0,0 +1,68 @@ + + + + +Struct template constructible_with_allocator_prefix + + + + + + + + + + + + + + + +
      Boost C++ LibrariesHomeLibrariesPeopleFAQMore
      +
      +
      +PrevUpHomeNext +
      +
      +
      +
      +

      Struct template constructible_with_allocator_prefix

      +

      boost::container::constructible_with_allocator_prefix

      +
      +

      Synopsis

      +
      // In header: <boost/container/uses_allocator.hpp>
      +
      +template<typename T> 
      +struct constructible_with_allocator_prefix {
      +
      +  // public data members
      +  static const bool value;
      +};
      +
      +

      Description

      +

      Remark: if a specialization constructible_with_allocator_prefix<X>::value is true, indicates that T may be constructed with allocator_arg and T::allocator_type as its first two constructor arguments. Ideally, all constructors of T (including the copy and move constructors) should have a variant that accepts these two initial arguments.

      +

      Requires: specialization constructible_with_allocator_prefix<X>::value is true, T must have a nested type, allocator_type and at least one constructor for which allocator_arg_t is the first parameter and allocator_type is the second parameter. If not all constructors of T can be called with these initial arguments, and if T is used in a context where a container must call such a constructor, then the program is ill-formed.

      +

      template <class T, class Allocator = allocator<T> > class Y { public: typedef Allocator allocator_type;

      +

      // Default constructor with and allocator-extended default constructor Y(); Y(allocator_arg_t, const allocator_type& a);

      +

      // Copy constructor and allocator-extended copy constructor Y(const Y& yy); Y(allocator_arg_t, const allocator_type& a, const Y& yy);

      +

      // Variadic constructor and allocator-extended variadic constructor template<class ...Args> Y(Args&& args...); template<class ...Args> Y(allocator_arg_t, const allocator_type& a, BOOST_FWD_REF(Args)... args); };

      +

      // Specialize trait for class template Y template <class T, class Allocator = allocator<T> > struct constructible_with_allocator_prefix<Y<T,Allocator> > { static const bool value = true; };

      +

      +

      Note: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)" (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments. Applications aiming portability with several compilers should always define this trait.

      +

      In conforming C++11 compilers or compilers supporting SFINAE expressions (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used to detect if a type should be constructed with suffix or prefix allocator arguments.

      +
      +
      + + + +
      +
      +
      +PrevUpHomeNext +
      + + diff --git a/doc/html/boost/container/default_init.html b/doc/html/boost/container/default_init.html index 43fd153325..7f3f48332a 100644 --- a/doc/html/boost/container/default_init.html +++ b/doc/html/boost/container/default_init.html @@ -34,7 +34,7 @@ static const default_init_t default_init;
    -

    Description

    +

    Description

    Value used to tag that the inserted values should be default initialized

    diff --git a/doc/html/boost/container/default_init_t.html b/doc/html/boost/container/default_init_t.html index 965e73a462..7965f891b6 100644 --- a/doc/html/boost/container/default_init_t.html +++ b/doc/html/boost/container/default_init_t.html @@ -36,7 +36,7 @@ struct default_init_t { };
    -

    Description

    +

    Description

    Type used to tag that the inserted values should be default initialized

    diff --git a/doc/html/boost/container/deque.html b/doc/html/boost/container/deque.html index 93f6cbb589..2100f66766 100644 --- a/doc/html/boost/container/deque.html +++ b/doc/html/boost/container/deque.html @@ -51,100 +51,100 @@ typedef implementation_defined const_reverse_iterator; // construct/copy/destruct - deque() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit deque(const allocator_type &) noexcept; - explicit deque(size_type); - deque(size_type, default_init_t); - explicit deque(size_type, const allocator_type &); - deque(size_type, default_init_t, const allocator_type &); - deque(size_type, const value_type &); - deque(size_type, const value_type &, const allocator_type &); - template<typename InIt> deque(InIt, InIt); - template<typename InIt> deque(InIt, InIt, const allocator_type &); - deque(std::initializer_list< value_type >, + deque() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit deque(const allocator_type &) noexcept; + explicit deque(size_type); + deque(size_type, default_init_t); + explicit deque(size_type, const allocator_type &); + deque(size_type, default_init_t, const allocator_type &); + deque(size_type, const value_type &); + deque(size_type, const value_type &, const allocator_type &); + template<typename InIt> deque(InIt, InIt); + template<typename InIt> deque(InIt, InIt, const allocator_type &); + deque(std::initializer_list< value_type >, const allocator_type & = allocator_type()); - deque(const deque &); - deque(deque &&) noexcept; - deque(const deque &, const allocator_type &); - deque(deque &&, const allocator_type &); - deque & operator=(const deque &); - deque & operator=(deque &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); - deque & operator=(std::initializer_list< value_type >); - ~deque(); + deque(const deque &); + deque(deque &&) noexcept; + deque(const deque &, const allocator_type &); + deque(deque &&, const allocator_type &); + deque & operator=(const deque &); + deque & operator=(deque &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); + deque & operator=(std::initializer_list< value_type >); + ~deque(); - // public member functions - void assign(size_type, const T &); - template<typename InIt> void assign(InIt, InIt); - void assign(std::initializer_list< value_type >); - allocator_type get_allocator() const noexcept; - const stored_allocator_type & get_stored_allocator() const noexcept; - stored_allocator_type & get_stored_allocator() noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_iterator cbegin() const noexcept; - const_iterator cend() const noexcept; - const_reverse_iterator crbegin() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const noexcept; - size_type size() const noexcept; - size_type max_size() const noexcept; - void resize(size_type); - void resize(size_type, default_init_t); - void resize(size_type, const value_type &); - void shrink_to_fit(); - reference front() noexcept; - const_reference front() const noexcept; - reference back() noexcept; - const_reference back() const noexcept; - reference operator[](size_type) noexcept; - const_reference operator[](size_type) const noexcept; - iterator nth(size_type) noexcept; - const_iterator nth(size_type) const noexcept; - size_type index_of(iterator) noexcept; - size_type index_of(const_iterator) const noexcept; - reference at(size_type); - const_reference at(size_type) const; - template<class... Args> reference emplace_front(Args &&...); - template<class... Args> reference emplace_back(Args &&...); - template<class... Args> iterator emplace(const_iterator, Args &&...); - void push_front(const T &); - void push_front(T &&); - void push_back(const T &); - void push_back(T &&); - iterator insert(const_iterator, const T &); - iterator insert(const_iterator, T &&); - iterator insert(const_iterator, size_type, const value_type &); - template<typename InIt> iterator insert(const_iterator, InIt, InIt); - iterator insert(const_iterator, std::initializer_list< value_type >); - void pop_front() noexcept; - void pop_back() noexcept; - iterator erase(const_iterator) noexcept; - iterator erase(const_iterator, const_iterator) noexcept; - void swap(deque &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); - void clear() noexcept; + // public member functions + void assign(size_type, const T &); + template<typename InIt> void assign(InIt, InIt); + void assign(std::initializer_list< value_type >); + allocator_type get_allocator() const noexcept; + const stored_allocator_type & get_stored_allocator() const noexcept; + stored_allocator_type & get_stored_allocator() noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const noexcept; + size_type size() const noexcept; + size_type max_size() const noexcept; + void resize(size_type); + void resize(size_type, default_init_t); + void resize(size_type, const value_type &); + void shrink_to_fit(); + reference front() noexcept; + const_reference front() const noexcept; + reference back() noexcept; + const_reference back() const noexcept; + reference operator[](size_type) noexcept; + const_reference operator[](size_type) const noexcept; + iterator nth(size_type) noexcept; + const_iterator nth(size_type) const noexcept; + size_type index_of(iterator) noexcept; + size_type index_of(const_iterator) const noexcept; + reference at(size_type); + const_reference at(size_type) const; + template<class... Args> reference emplace_front(Args &&...); + template<class... Args> reference emplace_back(Args &&...); + template<class... Args> iterator emplace(const_iterator, Args &&...); + void push_front(const T &); + void push_front(T &&); + void push_back(const T &); + void push_back(T &&); + iterator insert(const_iterator, const T &); + iterator insert(const_iterator, T &&); + iterator insert(const_iterator, size_type, const value_type &); + template<typename InIt> iterator insert(const_iterator, InIt, InIt); + iterator insert(const_iterator, std::initializer_list< value_type >); + void pop_front() noexcept; + void pop_back() noexcept; + iterator erase(const_iterator) noexcept; + iterator erase(const_iterator, const_iterator) noexcept; + void swap(deque &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); + void clear() noexcept; - // friend functions - friend bool operator==(const deque &, const deque &); - friend bool operator!=(const deque &, const deque &); - friend bool operator<(const deque &, const deque &); - friend bool operator>(const deque &, const deque &); - friend bool operator<=(const deque &, const deque &); - friend bool operator>=(const deque &, const deque &); - friend void swap(deque &, deque &); + // friend functions + friend bool operator==(const deque &, const deque &); + friend bool operator!=(const deque &, const deque &); + friend bool operator<(const deque &, const deque &); + friend bool operator>(const deque &, const deque &); + friend bool operator<=(const deque &, const deque &); + friend bool operator>=(const deque &, const deque &); + friend void swap(deque &, deque &); };
    -

    Description

    +

    Description

    A double-ended queue is a sequence that supports random access to elements, constant time insertion and removal of elements at the end of the sequence, and linear time insertion and removal of elements in the middle.

    -

    Template Parameters

    +

    Template Parameters

    1. typename T
      @@ -157,127 +157,127 @@
    -

    +

    deque public construct/copy/destruct

    1. -
      deque() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
      +
      deque() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));

      Effects: Default constructors a deque.

      Throws: If allocator_type's default constructor throws.

      Complexity: Constant.

    2. -
      explicit deque(const allocator_type & a) noexcept;
      +
      explicit deque(const allocator_type & a) noexcept;

      Effects: Constructs a deque taking the allocator as parameter.

      Throws: Nothing

      Complexity: Constant.

    3. -
      explicit deque(size_type n);
      +
      explicit deque(size_type n);

      Effects: Constructs a deque and inserts n value initialized values.

      Throws: If allocator_type's default constructor throws or T's value initialization throws.

      Complexity: Linear to n.

    4. -
      deque(size_type n, default_init_t);
      +
      deque(size_type n, default_init_t);

      Effects: Constructs a deque and inserts n default initialized values.

      Throws: If allocator_type's default constructor throws or T's default initialization or copy constructor throws.

      Complexity: Linear to n.

      Note: Non-standard extension

    5. -
      explicit deque(size_type n, const allocator_type & a);
      +
      explicit deque(size_type n, const allocator_type & a);

      Effects: Constructs a deque that will use a copy of allocator a and inserts n value initialized values.

      Throws: If allocator_type's default constructor throws or T's value initialization throws.

      Complexity: Linear to n.

    6. -
      deque(size_type n, default_init_t, const allocator_type & a);
      +
      deque(size_type n, default_init_t, const allocator_type & a);

      Effects: Constructs a deque that will use a copy of allocator a and inserts n default initialized values.

      Throws: If allocator_type's default constructor throws or T's default initialization or copy constructor throws.

      Complexity: Linear to n.

      Note: Non-standard extension

    7. -
      deque(size_type n, const value_type & value);
      +
      deque(size_type n, const value_type & value);

      Effects: Constructs a deque that will use a copy of allocator a and inserts n copies of value.

      Throws: If allocator_type's default constructor throws or T's copy constructor throws.

      Complexity: Linear to n.

    8. -
      deque(size_type n, const value_type & value, const allocator_type & a);
      +
      deque(size_type n, const value_type & value, const allocator_type & a);

      Effects: Constructs a deque that will use a copy of allocator a and inserts n copies of value.

      Throws: If allocator_type's default constructor throws or T's copy constructor throws.

      Complexity: Linear to n.

    9. -
      template<typename InIt> deque(InIt first, InIt last);
      +
      template<typename InIt> deque(InIt first, InIt last);

      Effects: Constructs a deque that will use a copy of allocator a and inserts a copy of the range [first, last) in the deque.

      Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced InIt throws.

      Complexity: Linear to the range [first, last).

    10. -
      template<typename InIt> deque(InIt first, InIt last, const allocator_type & a);
      +
      template<typename InIt> deque(InIt first, InIt last, const allocator_type & a);

      Effects: Constructs a deque that will use a copy of allocator a and inserts a copy of the range [first, last) in the deque.

      Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced InIt throws.

      Complexity: Linear to the range [first, last).

    11. -
      deque(std::initializer_list< value_type > il, 
      +
      deque(std::initializer_list< value_type > il, 
             const allocator_type & a = allocator_type());

      Effects: Constructs a deque that will use a copy of allocator a and inserts a copy of the range [il.begin(), il.end()) in the deque.

      Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced std::initializer_list iterator throws.

      Complexity: Linear to the range [il.begin(), il.end()).

    12. -
      deque(const deque & x);
      +
      deque(const deque & x);

      Effects: Copy constructs a deque.

      Postcondition: x == *this.

      Complexity: Linear to the elements x contains.

    13. -
      deque(deque && x) noexcept;
      +
      deque(deque && x) noexcept;

      Effects: Move constructor. Moves x's resources to *this.

      Throws: If allocator_type's copy constructor throws.

      Complexity: Constant.

    14. -
      deque(const deque & x, const allocator_type & a);
      +
      deque(const deque & x, const allocator_type & a);

      Effects: Copy constructs a vector using the specified allocator.

      Postcondition: x == *this.

      Throws: If allocation throws or T's copy constructor throws.

      Complexity: Linear to the elements x contains.

    15. -
      deque(deque && x, const allocator_type & a);
      +
      deque(deque && x, const allocator_type & a);

      Effects: Move constructor using the specified allocator. Moves x's resources to *this if a == allocator_type(). Otherwise copies values from x to *this.

      Throws: If allocation or T's copy constructor throws.

      Complexity: Constant if a == x.get_allocator(), linear otherwise.

    16. -
      deque & operator=(const deque & x);
      +
      deque & operator=(const deque & x);

      Effects: Makes *this contain the same elements as x.

      Postcondition: this->size() == x.size(). *this contains a copy of each of x's elements.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Linear to the number of elements in x.

    17. -
      deque & operator=(deque && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));
      +
      deque & operator=(deque && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));

      Effects: Move assignment. All x's values are transferred to *this.

      Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

      Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

    18. -
      deque & operator=(std::initializer_list< value_type > il);
      +
      deque & operator=(std::initializer_list< value_type > il);

      Effects: Makes *this contain the same elements as il.

      Postcondition: this->size() == il.size(). *this contains a copy of each of x's elements.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Linear to the number of elements in il.

    19. -
      ~deque();
      +
      ~deque();

      Effects: Destroys the deque. All stored values are destroyed and used memory is deallocated.

      Throws: Nothing.

      Complexity: Linear to the number of elements.

      @@ -285,206 +285,206 @@
    -

    -deque public member functions

    +

    +deque public member functions

    1. -
      void assign(size_type n, const T & val);
      +
      void assign(size_type n, const T & val);

      Effects: Assigns the n copies of val to *this.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Linear to n.

    2. -
      template<typename InIt> void assign(InIt first, InIt last);
      +
      template<typename InIt> void assign(InIt first, InIt last);

      Effects: Assigns the the range [first, last) to *this.

      Throws: If memory allocation throws or T's constructor from dereferencing InIt throws.

      Complexity: Linear to n.

    3. -
      void assign(std::initializer_list< value_type > il);
      +
      void assign(std::initializer_list< value_type > il);

      Effects: Assigns the the range [il.begin(), il.end()) to *this.

      Throws: If memory allocation throws or T's constructor from dereferencing std::initializer_list iterator throws.

      Complexity: Linear to il.size().

    4. -
      allocator_type get_allocator() const noexcept;
      +
      allocator_type get_allocator() const noexcept;

      Effects: Returns a copy of the internal allocator.

      Throws: If allocator's copy constructor throws.

      Complexity: Constant.

    5. -
      const stored_allocator_type & get_stored_allocator() const noexcept;
      +
      const stored_allocator_type & get_stored_allocator() const noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    6. -
      stored_allocator_type & get_stored_allocator() noexcept;
      +
      stored_allocator_type & get_stored_allocator() noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    7. -
      iterator begin() noexcept;
      +
      iterator begin() noexcept;

      Effects: Returns an iterator to the first element contained in the deque.

      Throws: Nothing.

      Complexity: Constant.

    8. -
      const_iterator begin() const noexcept;
      +
      const_iterator begin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the deque.

      Throws: Nothing.

      Complexity: Constant.

    9. -
      iterator end() noexcept;
      +
      iterator end() noexcept;

      Effects: Returns an iterator to the end of the deque.

      Throws: Nothing.

      Complexity: Constant.

    10. -
      const_iterator end() const noexcept;
      +
      const_iterator end() const noexcept;

      Effects: Returns a const_iterator to the end of the deque.

      Throws: Nothing.

      Complexity: Constant.

    11. -
      reverse_iterator rbegin() noexcept;
      +
      reverse_iterator rbegin() noexcept;

      Effects: Returns a reverse_iterator pointing to the beginning of the reversed deque.

      Throws: Nothing.

      Complexity: Constant.

    12. -
      const_reverse_iterator rbegin() const noexcept;
      +
      const_reverse_iterator rbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed deque.

      Throws: Nothing.

      Complexity: Constant.

    13. -
      reverse_iterator rend() noexcept;
      +
      reverse_iterator rend() noexcept;

      Effects: Returns a reverse_iterator pointing to the end of the reversed deque.

      Throws: Nothing.

      Complexity: Constant.

    14. -
      const_reverse_iterator rend() const noexcept;
      +
      const_reverse_iterator rend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed deque.

      Throws: Nothing.

      Complexity: Constant.

    15. -
      const_iterator cbegin() const noexcept;
      +
      const_iterator cbegin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the deque.

      Throws: Nothing.

      Complexity: Constant.

    16. -
      const_iterator cend() const noexcept;
      +
      const_iterator cend() const noexcept;

      Effects: Returns a const_iterator to the end of the deque.

      Throws: Nothing.

      Complexity: Constant.

    17. -
      const_reverse_iterator crbegin() const noexcept;
      +
      const_reverse_iterator crbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed deque.

      Throws: Nothing.

      Complexity: Constant.

    18. -
      const_reverse_iterator crend() const noexcept;
      +
      const_reverse_iterator crend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed deque.

      Throws: Nothing.

      Complexity: Constant.

    19. -
      bool empty() const noexcept;
      +
      bool empty() const noexcept;

      Effects: Returns true if the deque contains no elements.

      Throws: Nothing.

      Complexity: Constant.

    20. -
      size_type size() const noexcept;
      +
      size_type size() const noexcept;

      Effects: Returns the number of the elements contained in the deque.

      Throws: Nothing.

      Complexity: Constant.

    21. -
      size_type max_size() const noexcept;
      +
      size_type max_size() const noexcept;

      Effects: Returns the largest possible size of the deque.

      Throws: Nothing.

      Complexity: Constant.

    22. -
      void resize(size_type new_size);
      +
      void resize(size_type new_size);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are value initialized.

      Throws: If memory allocation throws, or T's constructor throws.

      Complexity: Linear to the difference between size() and new_size.

    23. -
      void resize(size_type new_size, default_init_t);
      +
      void resize(size_type new_size, default_init_t);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are default initialized.

      Throws: If memory allocation throws, or T's constructor throws.

      Complexity: Linear to the difference between size() and new_size.

      Note: Non-standard extension

    24. -
      void resize(size_type new_size, const value_type & x);
      +
      void resize(size_type new_size, const value_type & x);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are copy constructed from x.

      Throws: If memory allocation throws, or T's copy constructor throws.

      Complexity: Linear to the difference between size() and new_size.

    25. -
      void shrink_to_fit();
      +
      void shrink_to_fit();

      Effects: Tries to deallocate the excess of memory created with previous allocations. The size of the deque is unchanged

      Throws: If memory allocation throws.

      Complexity: Constant.

    26. -
      reference front() noexcept;
      +
      reference front() noexcept;

      Requires: !empty()

      Effects: Returns a reference to the first element of the container.

      Throws: Nothing.

      Complexity: Constant.

    27. -
      const_reference front() const noexcept;
      +
      const_reference front() const noexcept;

      Requires: !empty()

      Effects: Returns a const reference to the first element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    28. -
      reference back() noexcept;
      +
      reference back() noexcept;

      Requires: !empty()

      Effects: Returns a reference to the last element of the container.

      Throws: Nothing.

      Complexity: Constant.

    29. -
      const_reference back() const noexcept;
      +
      const_reference back() const noexcept;

      Requires: !empty()

      Effects: Returns a const reference to the last element of the container.

      Throws: Nothing.

      Complexity: Constant.

    30. -
      reference operator[](size_type n) noexcept;
      +
      reference operator[](size_type n) noexcept;

      Requires: size() > n.

      Effects: Returns a reference to the nth element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    31. -
      const_reference operator[](size_type n) const noexcept;
      +
      const_reference operator[](size_type n) const noexcept;

      Requires: size() > n.

      Effects: Returns a const reference to the nth element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    32. -
      iterator nth(size_type n) noexcept;
      +
      iterator nth(size_type n) noexcept;

      Requires: size() >= n.

      Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

      Throws: Nothing.

      @@ -492,7 +492,7 @@

      Note: Non-standard extension

    33. -
      const_iterator nth(size_type n) const noexcept;
      +
      const_iterator nth(size_type n) const noexcept;

      Requires: size() >= n.

      Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

      Throws: Nothing.

      @@ -500,7 +500,7 @@

      Note: Non-standard extension

    34. -
      size_type index_of(iterator p) noexcept;
      +
      size_type index_of(iterator p) noexcept;

      Requires: begin() <= p <= end().

      Effects: Returns the index of the element pointed by p and size() if p == end().

      Throws: Nothing.

      @@ -508,7 +508,7 @@

      Note: Non-standard extension

    35. -
      size_type index_of(const_iterator p) const noexcept;
      +
      size_type index_of(const_iterator p) const noexcept;

      Requires: begin() <= p <= end().

      Effects: Returns the index of the element pointed by p and size() if p == end().

      Throws: Nothing.

      @@ -516,66 +516,66 @@

      Note: Non-standard extension

    36. -
      reference at(size_type n);
      +
      reference at(size_type n);

      Requires: size() > n.

      Effects: Returns a reference to the nth element from the beginning of the container.

      Throws: std::range_error if n >= size()

      Complexity: Constant.

    37. -
      const_reference at(size_type n) const;
      +
      const_reference at(size_type n) const;

      Requires: size() > n.

      Effects: Returns a const reference to the nth element from the beginning of the container.

      Throws: std::range_error if n >= size()

      Complexity: Constant.

    38. -
      template<class... Args> reference emplace_front(Args &&... args);
      +
      template<class... Args> reference emplace_front(Args &&... args);

      Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the beginning of the deque.

      Returns: A reference to the created object.

      Throws: If memory allocation throws or the in-place constructor throws.

      Complexity: Amortized constant time

    39. -
      template<class... Args> reference emplace_back(Args &&... args);
      +
      template<class... Args> reference emplace_back(Args &&... args);

      Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the end of the deque.

      Returns: A reference to the created object.

      Throws: If memory allocation throws or the in-place constructor throws.

      Complexity: Amortized constant time

    40. -
      template<class... Args> iterator emplace(const_iterator p, Args &&... args);
      +
      template<class... Args> iterator emplace(const_iterator p, Args &&... args);

      Requires: p must be a valid iterator of *this.

      Effects: Inserts an object of type T constructed with std::forward<Args>(args)... before p

      Throws: If memory allocation throws or the in-place constructor throws.

      Complexity: If p is end(), amortized constant time Linear time otherwise.

    41. -
      void push_front(const T & x);
      +
      void push_front(const T & x);

      Effects: Inserts a copy of x at the front of the deque.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Amortized constant time.

    42. -
      void push_front(T && x);
      +
      void push_front(T && x);

      Effects: Constructs a new element in the front of the deque and moves the resources of x to this new element.

      Throws: If memory allocation throws.

      Complexity: Amortized constant time.

    43. -
      void push_back(const T & x);
      +
      void push_back(const T & x);

      Effects: Inserts a copy of x at the end of the deque.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Amortized constant time.

    44. -
      void push_back(T && x);
      +
      void push_back(T && x);

      Effects: Constructs a new element in the end of the deque and moves the resources of x to this new element.

      Throws: If memory allocation throws.

      Complexity: Amortized constant time.

    45. -
      iterator insert(const_iterator p, const T & x);
      +
      iterator insert(const_iterator p, const T & x);

      Requires: p must be a valid iterator of *this.

      Effects: Insert a copy of x before p.

      Returns: an iterator to the inserted element.

      @@ -583,7 +583,7 @@

      Complexity: If p is end(), amortized constant time Linear time otherwise.

    46. -
      iterator insert(const_iterator p, T && x);
      +
      iterator insert(const_iterator p, T && x);

      Requires: p must be a valid iterator of *this.

      Effects: Insert a new element before p with x's resources.

      Returns: an iterator to the inserted element.

      @@ -591,7 +591,7 @@

      Complexity: If p is end(), amortized constant time Linear time otherwise.

    47. -
      iterator insert(const_iterator pos, size_type n, const value_type & x);
      +
      iterator insert(const_iterator pos, size_type n, const value_type & x);

      Requires: pos must be a valid iterator of *this.

      Effects: Insert n copies of x before pos.

      Returns: an iterator to the first inserted element or pos if n is 0.

      @@ -600,7 +600,7 @@
    48. template<typename InIt> 
      -  iterator insert(const_iterator pos, InIt first, InIt last);
      + iterator insert(const_iterator pos, InIt first, InIt last);

      Requires: pos must be a valid iterator of *this.

      Effects: Insert a copy of the [first, last) range before pos.

      Returns: an iterator to the first inserted element or pos if first == last.

      @@ -608,7 +608,7 @@

      Complexity: Linear to distance [first, last).

    49. -
      iterator insert(const_iterator pos, std::initializer_list< value_type > il);
      +
      iterator insert(const_iterator pos, std::initializer_list< value_type > il);

      Requires: pos must be a valid iterator of *this.

      Effects: Insert a copy of the [il.begin(), il.end()) range before pos.

      Returns: an iterator to the first inserted element or pos if il.begin() == il.end().

      @@ -616,37 +616,37 @@

      Complexity: Linear to distance [il.begin(), il.end()).

    50. -
      void pop_front() noexcept;
      +
      void pop_front() noexcept;

      Effects: Removes the first element from the deque.

      Throws: Nothing.

      Complexity: Constant time.

    51. -
      void pop_back() noexcept;
      +
      void pop_back() noexcept;

      Effects: Removes the last element from the deque.

      Throws: Nothing.

      Complexity: Constant time.

    52. -
      iterator erase(const_iterator pos) noexcept;
      +
      iterator erase(const_iterator pos) noexcept;

      Effects: Erases the element at p.

      Throws: Nothing.

      Complexity: Linear to the elements between pos and the last element (if pos is near the end) or the first element if(pos is near the beginning). Constant if pos is the first or the last element.

    53. -
      iterator erase(const_iterator first, const_iterator last) noexcept;
      +
      iterator erase(const_iterator first, const_iterator last) noexcept;

      Effects: Erases the elements pointed by [first, last).

      Throws: Nothing.

      Complexity: Linear to the distance between first and last plus the elements between pos and the last element (if pos is near the end) or the first element if(pos is near the beginning).

    54. -
      void swap(deque & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));
      +
      void swap(deque & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));

      Effects: Swaps the contents of *this and x.

      Throws: Nothing.

      Complexity: Constant.

    55. -
      void clear() noexcept;
      +
      void clear() noexcept;

      Effects: Erases all the elements of the deque.

      Throws: Nothing.

      Complexity: Linear to the number of elements in the deque.

      @@ -654,41 +654,41 @@
    -

    -deque friend functions

    +

    +deque friend functions

    1. -
      friend bool operator==(const deque & x, const deque & y);
      +
      friend bool operator==(const deque & x, const deque & y);

      Effects: Returns true if x and y are equal

      Complexity: Linear to the number of elements in the container.

    2. -
      friend bool operator!=(const deque & x, const deque & y);
      +
      friend bool operator!=(const deque & x, const deque & y);

      Effects: Returns true if x and y are unequal

      Complexity: Linear to the number of elements in the container.

    3. -
      friend bool operator<(const deque & x, const deque & y);
      +
      friend bool operator<(const deque & x, const deque & y);

      Effects: Returns true if x is less than y

      Complexity: Linear to the number of elements in the container.

    4. -
      friend bool operator>(const deque & x, const deque & y);
      +
      friend bool operator>(const deque & x, const deque & y);

      Effects: Returns true if x is greater than y

      Complexity: Linear to the number of elements in the container.

    5. -
      friend bool operator<=(const deque & x, const deque & y);
      +
      friend bool operator<=(const deque & x, const deque & y);

      Effects: Returns true if x is equal or less than y

      Complexity: Linear to the number of elements in the container.

    6. -
      friend bool operator>=(const deque & x, const deque & y);
      +
      friend bool operator>=(const deque & x, const deque & y);

      Effects: Returns true if x is equal or greater than y

      Complexity: Linear to the number of elements in the container.

    7. -
      friend void swap(deque & x, deque & y);
      +
      friend void swap(deque & x, deque & y);

      Effects: x.swap(y)

      Complexity: Constant.

    8. diff --git a/doc/html/boost/container/erased_type.html b/doc/html/boost/container/erased_type.html index 1958973dd1..4eb4d50fc1 100644 --- a/doc/html/boost/container/erased_type.html +++ b/doc/html/boost/container/erased_type.html @@ -36,7 +36,7 @@ struct erased_type { };
    -

    Description

    +

    Description

    The erased_type struct is an empty struct that serves as a placeholder for a type T in situations where the actual type T is determined at runtime. For example, the nested type, allocator_type, is an alias for erased_type in classes that use type-erased allocators.

    diff --git a/doc/html/boost/container/flat_map.html b/doc/html/boost/container/flat_map.html index df738bd6dc..4bc8d7327e 100644 --- a/doc/html/boost/container/flat_map.html +++ b/doc/html/boost/container/flat_map.html @@ -33,177 +33,179 @@
    // In header: <boost/container/flat_map.hpp>
     
     template<typename Key, typename T, typename Compare = std::less<Key>, 
    -         typename Allocator = new_allocator< std::pair< Key, T> > > 
    +         typename AllocatorOrContainer = new_allocator< std::pair< Key, T> > > 
     class flat_map {
     public:
       // types
    -  typedef Key                                                              key_type;              
    -  typedef T                                                                mapped_type;           
    -  typedef std::pair< Key, T >                                              value_type;            
    -  typedef ::boost::container::allocator_traits< Allocator >                allocator_traits_type; 
    -  typedef boost::container::allocator_traits< Allocator >::pointer         pointer;               
    -  typedef boost::container::allocator_traits< Allocator >::const_pointer   const_pointer;         
    -  typedef boost::container::allocator_traits< Allocator >::reference       reference;             
    -  typedef boost::container::allocator_traits< Allocator >::const_reference const_reference;       
    -  typedef boost::container::allocator_traits< Allocator >::size_type       size_type;             
    -  typedef boost::container::allocator_traits< Allocator >::difference_type difference_type;       
    -  typedef Allocator                                                        allocator_type;        
    -  typedef implementation_defined                                           stored_allocator_type; 
    -  typedef implementation_defined                                           value_compare;         
    -  typedef Compare                                                          key_compare;           
    -  typedef implementation_defined                                           iterator;              
    -  typedef implementation_defined                                           const_iterator;        
    -  typedef implementation_defined                                           reverse_iterator;      
    -  typedef implementation_defined                                           const_reverse_iterator;
    -  typedef implementation_defined                                           movable_value_type;    
    -  typedef implementation_defined                                           sequence_type;         
    +  typedef Key                                                    key_type;              
    +  typedef T                                                      mapped_type;           
    +  typedef Compare                                                key_compare;           
    +  typedef std::pair< Key, T >                                    value_type;            
    +  typedef implementation_defined                                 sequence_type;         
    +  typedef sequence_type::allocator_type                          allocator_type;        
    +  typedef ::boost::container::allocator_traits< allocator_type > allocator_traits_type; 
    +  typedef sequence_type::pointer                                 pointer;               
    +  typedef sequence_type::const_pointer                           const_pointer;         
    +  typedef sequence_type::reference                               reference;             
    +  typedef sequence_type::const_reference                         const_reference;       
    +  typedef sequence_type::size_type                               size_type;             
    +  typedef sequence_type::difference_type                         difference_type;       
    +  typedef implementation_defined                                 stored_allocator_type; 
    +  typedef implementation_defined                                 value_compare;         
    +  typedef sequence_type::iterator                                iterator;              
    +  typedef sequence_type::const_iterator                          const_iterator;        
    +  typedef sequence_type::reverse_iterator                        reverse_iterator;      
    +  typedef sequence_type::const_reverse_iterator                  const_reverse_iterator;
    +  typedef implementation_defined                                 movable_value_type;    
     
       // construct/copy/destruct
    -  flat_map() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
    -  explicit flat_map(const allocator_type &);
    -  explicit flat_map(const Compare &);
    -  flat_map(const Compare &, const allocator_type &);
    -  template<typename InputIterator> flat_map(InputIterator, InputIterator);
    +  flat_map() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
    +  explicit flat_map(const allocator_type &);
    +  explicit flat_map(const Compare &);
    +  flat_map(const Compare &, const allocator_type &);
    +  template<typename InputIterator> flat_map(InputIterator, InputIterator);
       template<typename InputIterator> 
    -    flat_map(InputIterator, InputIterator, const allocator_type &);
    +    flat_map(InputIterator, InputIterator, const allocator_type &);
       template<typename InputIterator> 
    -    flat_map(InputIterator, InputIterator, const Compare &);
    +    flat_map(InputIterator, InputIterator, const Compare &);
       template<typename InputIterator> 
    -    flat_map(InputIterator, InputIterator, const Compare &, 
    +    flat_map(InputIterator, InputIterator, const Compare &, 
                  const allocator_type &);
       template<typename InputIterator> 
    -    flat_map(ordered_unique_range_t, InputIterator, InputIterator);
    +    flat_map(ordered_unique_range_t, InputIterator, InputIterator);
       template<typename InputIterator> 
    -    flat_map(ordered_unique_range_t, InputIterator, InputIterator, 
    +    flat_map(ordered_unique_range_t, InputIterator, InputIterator, 
                  const Compare &);
       template<typename InputIterator> 
    -    flat_map(ordered_unique_range_t, InputIterator, InputIterator, 
    +    flat_map(ordered_unique_range_t, InputIterator, InputIterator, 
                  const Compare &, const allocator_type &);
    -  flat_map(std::initializer_list< value_type >);
    -  flat_map(std::initializer_list< value_type >, const allocator_type &);
    -  flat_map(std::initializer_list< value_type >, const Compare &);
    -  flat_map(std::initializer_list< value_type >, const Compare &, 
    +  flat_map(std::initializer_list< value_type >);
    +  flat_map(std::initializer_list< value_type >, const allocator_type &);
    +  flat_map(std::initializer_list< value_type >, const Compare &);
    +  flat_map(std::initializer_list< value_type >, const Compare &, 
                const allocator_type &);
    -  flat_map(ordered_unique_range_t, std::initializer_list< value_type >);
    -  flat_map(ordered_unique_range_t, std::initializer_list< value_type >, 
    +  flat_map(ordered_unique_range_t, std::initializer_list< value_type >);
    +  flat_map(ordered_unique_range_t, std::initializer_list< value_type >, 
                const Compare &);
    -  flat_map(ordered_unique_range_t, std::initializer_list< value_type >, 
    +  flat_map(ordered_unique_range_t, std::initializer_list< value_type >, 
                const Compare &, const allocator_type &);
    -  flat_map(const flat_map &);
    -  flat_map(flat_map &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
    -  flat_map(const flat_map &, const allocator_type &);
    -  flat_map(flat_map &&, const allocator_type &);
    -  flat_map & operator=(const flat_map &);
    -  flat_map & operator=(flat_map &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
    -  flat_map & operator=(std::initializer_list< value_type >);
    +  flat_map(const flat_map &);
    +  flat_map(flat_map &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
    +  flat_map(const flat_map &, const allocator_type &);
    +  flat_map(flat_map &&, const allocator_type &);
    +  flat_map & operator=(const flat_map &);
    +  flat_map & operator=(flat_map &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
    +  flat_map & operator=(std::initializer_list< value_type >);
     
    -  // public member functions
    -   BOOST_STATIC_ASSERT(unspecified);
    -  allocator_type get_allocator() const noexcept;
    -  stored_allocator_type & get_stored_allocator() noexcept;
    -  const stored_allocator_type & get_stored_allocator() const noexcept;
    -  iterator begin() noexcept;
    -  const_iterator begin() const noexcept;
    -  iterator end() noexcept;
    -  const_iterator end() const noexcept;
    -  reverse_iterator rbegin() noexcept;
    -  const_reverse_iterator rbegin() const noexcept;
    -  reverse_iterator rend() noexcept;
    -  const_reverse_iterator rend() const noexcept;
    -  const_iterator cbegin() const noexcept;
    -  const_iterator cend() const noexcept;
    -  const_reverse_iterator crbegin() const noexcept;
    -  const_reverse_iterator crend() const noexcept;
    -  bool empty() const noexcept;
    -  size_type size() const noexcept;
    -  size_type max_size() const noexcept;
    -  size_type capacity() const noexcept;
    -  void reserve(size_type);
    -  void shrink_to_fit();
    -  mapped_type & operator[](const key_type &);
    -  mapped_type & operator[](key_type &&);
    +  // public member functions
    +   BOOST_STATIC_ASSERT(unspecified);
    +  allocator_type get_allocator() const noexcept;
    +  get_stored_allocator_noconst_return_t get_stored_allocator() noexcept;
    +  get_stored_allocator_const_return_t get_stored_allocator() const noexcept;
    +  iterator begin() noexcept;
    +  const_iterator begin() const noexcept;
    +  iterator end() noexcept;
    +  const_iterator end() const noexcept;
    +  reverse_iterator rbegin() noexcept;
    +  const_reverse_iterator rbegin() const noexcept;
    +  reverse_iterator rend() noexcept;
    +  const_reverse_iterator rend() const noexcept;
    +  const_iterator cbegin() const noexcept;
    +  const_iterator cend() const noexcept;
    +  const_reverse_iterator crbegin() const noexcept;
    +  const_reverse_iterator crend() const noexcept;
    +  bool empty() const noexcept;
    +  size_type size() const noexcept;
    +  size_type max_size() const noexcept;
    +  size_type capacity() const noexcept;
    +  void reserve(size_type);
    +  void shrink_to_fit();
    +  mapped_type & operator[](const key_type &);
    +  mapped_type & operator[](key_type &&);
       template<typename M> 
    -    std::pair< iterator, bool > insert_or_assign(const key_type &, M &&);
    +    std::pair< iterator, bool > insert_or_assign(const key_type &, M &&);
       template<typename M> 
    -    std::pair< iterator, bool > insert_or_assign(key_type &&, M &&);
    +    std::pair< iterator, bool > insert_or_assign(key_type &&, M &&);
       template<typename M> 
    -    iterator insert_or_assign(const_iterator, const key_type &, M &&);
    +    iterator insert_or_assign(const_iterator, const key_type &, M &&);
       template<typename M> 
    -    iterator insert_or_assign(const_iterator, key_type &&, M &&);
    -  iterator nth(size_type) noexcept;
    -  const_iterator nth(size_type) const noexcept;
    -  size_type index_of(iterator) noexcept;
    -  size_type index_of(const_iterator) const noexcept;
    -  T & at(const key_type &);
    -  const T & at(const key_type &) const;
    -  template<class... Args> std::pair< iterator, bool > emplace(Args &&...);
    -  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
    +    iterator insert_or_assign(const_iterator, key_type &&, M &&);
    +  iterator nth(size_type) noexcept;
    +  const_iterator nth(size_type) const noexcept;
    +  size_type index_of(iterator) noexcept;
    +  size_type index_of(const_iterator) const noexcept;
    +  T & at(const key_type &);
    +  const T & at(const key_type &) const;
    +  template<class... Args> std::pair< iterator, bool > emplace(Args &&...);
    +  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
       template<class... Args> 
    -    std::pair< iterator, bool > try_emplace(const key_type &, Args &&...);
    +    std::pair< iterator, bool > try_emplace(const key_type &, Args &&...);
       template<class... Args> 
    -    iterator try_emplace(const_iterator, const key_type &, Args &&...);
    +    iterator try_emplace(const_iterator, const key_type &, Args &&...);
       template<class... Args> 
    -    std::pair< iterator, bool > try_emplace(key_type &&, Args &&...);
    +    std::pair< iterator, bool > try_emplace(key_type &&, Args &&...);
       template<class... Args> 
    -    iterator try_emplace(const_iterator, key_type &&, Args &&...);
    -  std::pair< iterator, bool > insert(const value_type &);
    -  std::pair< iterator, bool > insert(value_type &&);
    -  std::pair< iterator, bool > insert(movable_value_type &&);
    -  iterator insert(const_iterator, const value_type &);
    -  iterator insert(const_iterator, value_type &&);
    -  iterator insert(const_iterator, movable_value_type &&);
    -  template<typename InputIterator> void insert(InputIterator, InputIterator);
    +    iterator try_emplace(const_iterator, key_type &&, Args &&...);
    +  std::pair< iterator, bool > insert(const value_type &);
    +  std::pair< iterator, bool > insert(value_type &&);
    +  std::pair< iterator, bool > insert(movable_value_type &&);
    +  iterator insert(const_iterator, const value_type &);
    +  iterator insert(const_iterator, value_type &&);
    +  iterator insert(const_iterator, movable_value_type &&);
    +  template<typename InputIterator> void insert(InputIterator, InputIterator);
       template<typename InputIterator> 
    -    void insert(ordered_unique_range_t, InputIterator, InputIterator);
    -  void insert(std::initializer_list< value_type >);
    -  void insert(ordered_unique_range_t, std::initializer_list< value_type >);
    -  template<typename C2> void merge(flat_map< Key, T, C2, Allocator > &);
    -  template<typename C2> void merge(flat_map< Key, T, C2, Allocator > &&);
    -  template<typename C2> void merge(flat_multimap< Key, T, C2, Allocator > &);
    -  template<typename C2> void merge(flat_multimap< Key, T, C2, Allocator > &&);
    -  iterator erase(const_iterator);
    -  size_type erase(const key_type &);
    -  iterator erase(const_iterator, const_iterator);
    -  void swap(flat_map &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
    -  void clear() noexcept;
    -  key_compare key_comp() const;
    -  value_compare value_comp() const;
    -  iterator find(const key_type &);
    -  const_iterator find(const key_type &) const;
    -  size_type count(const key_type &) const;
    -  iterator lower_bound(const key_type &);
    -  const_iterator lower_bound(const key_type &) const;
    -  iterator upper_bound(const key_type &);
    -  const_iterator upper_bound(const key_type &) const;
    -  std::pair< iterator, iterator > equal_range(const key_type &);
    +    void insert(ordered_unique_range_t, InputIterator, InputIterator);
    +  void insert(std::initializer_list< value_type >);
    +  void insert(ordered_unique_range_t, std::initializer_list< value_type >);
    +  template<typename C2> 
    +    void merge(flat_map< Key, T, C2, AllocatorOrContainer > &);
    +  template<typename C2> 
    +    void merge(flat_map< Key, T, C2, AllocatorOrContainer > &&);
    +  template<typename C2> 
    +    void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > &);
    +  template<typename C2> 
    +    void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > &&);
    +  iterator erase(const_iterator);
    +  size_type erase(const key_type &);
    +  iterator erase(const_iterator, const_iterator);
    +  void swap(flat_map &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
    +  void clear() noexcept;
    +  key_compare key_comp() const;
    +  value_compare value_comp() const;
    +  iterator find(const key_type &);
    +  const_iterator find(const key_type &) const;
    +  size_type count(const key_type &) const;
    +  iterator lower_bound(const key_type &);
    +  const_iterator lower_bound(const key_type &) const;
    +  iterator upper_bound(const key_type &);
    +  const_iterator upper_bound(const key_type &) const;
    +  std::pair< iterator, iterator > equal_range(const key_type &);
       std::pair< const_iterator, const_iterator > 
    -  equal_range(const key_type &) const;
    -  sequence_type extract_sequence();
    -  void adopt_sequence(sequence_type &&);
    -  void adopt_sequence(ordered_unique_range_t, sequence_type &&);
    +  equal_range(const key_type &) const;
    +  sequence_type extract_sequence();
    +  void adopt_sequence(sequence_type &&);
    +  void adopt_sequence(ordered_unique_range_t, sequence_type &&);
     
    -  // friend functions
    -  friend bool operator==(const flat_map &, const flat_map &);
    -  friend bool operator!=(const flat_map &, const flat_map &);
    -  friend bool operator<(const flat_map &, const flat_map &);
    -  friend bool operator>(const flat_map &, const flat_map &);
    -  friend bool operator<=(const flat_map &, const flat_map &);
    -  friend bool operator>=(const flat_map &, const flat_map &);
    -  friend void swap(flat_map &, flat_map &);
    +  // friend functions
    +  friend bool operator==(const flat_map &, const flat_map &);
    +  friend bool operator!=(const flat_map &, const flat_map &);
    +  friend bool operator<(const flat_map &, const flat_map &);
    +  friend bool operator>(const flat_map &, const flat_map &);
    +  friend bool operator<=(const flat_map &, const flat_map &);
    +  friend bool operator>=(const flat_map &, const flat_map &);
    +  friend void swap(flat_map &, flat_map &);
     };
    -

    Description

    -

    A flat_map is a kind of associative container that supports unique keys (contains at most one of each key value) and provides for fast retrieval of values of another type T based on the keys. The flat_map class supports random-access iterators.

    -

    A flat_map satisfies all of the requirements of a container and of a reversible container and of an associative container. A flat_map also provides most operations described for unique keys. For a flat_map<Key,T> the key_type is Key and the value_type is std::pair<Key,T> (unlike std::map<Key, T> which value_type is std::pair<const Key, T>).

    -

    Compare is the ordering function for Keys (e.g. std::less<Key>).

    -

    Allocator is the allocator to allocate the value_types (e.g. allocator< std::pair<Key, T> >).

    -

    flat_map is similar to std::map but it's implemented like an ordered vector. This means that inserting a new element into a flat_map invalidates previous iterators and references

    -

    Erasing an element invalidates iterators and references pointing to elements that come after (their keys are bigger) the erased element.

    +

    Description

    +

    A flat_map is a kind of associative container that supports unique keys (contains at most one of each key value) and provides for fast retrieval of values of another type T based on the keys.

    +

    A flat_map satisfies all of the requirements of a container, a reversible container and an associative container. A flat_map also provides most operations described for unique keys. For a flat_map<Key,T> the key_type is Key and the value_type is std::pair<Key,T> (unlike std::map<Key, T> which value_type is std::pair<const Key, T>).

    +

    flat_map is similar to std::map but it's implemented by as an ordered sequence container. The underlying sequence container is by default vector but it can also work user-provided vector-like SequenceContainers (like static_vector or small_vector).

    +

    Using vector-like sequence containers means that inserting a new element into a flat_map might invalidate previous iterators and references (unless that sequence container is stable_vector or a similar container that offers stable pointers and references). Similarly, erasing an element might invalidate iterators and references pointing to elements that come after (their keys are bigger) the erased element.

    This container provides random-access iterators.

    -

    Template Parameters

    +

    Template Parameters

    1. typename Key
      @@ -215,65 +217,71 @@

      is the ordering function for Keys (e.g. std::less<Key>).

    2. -
      typename Allocator = new_allocator< std::pair< Key, T> >
      -

      is the allocator to allocate the value_types (e.g. allocator< std::pair<Key, T> > ).

      +
      typename AllocatorOrContainer = new_allocator< std::pair< Key, T> >
      +

      is either:

      +
        +
      • The allocator to allocate value_types (e.g. allocator< std::pair<Key, T> > ). (in this case sequence_type will be vector<value_type, AllocatorOrContainer>)

      • +
      • The SequenceContainer to be used as the underlying sequence_type. It must be a vector-like sequence container with random-access iterators..

      • +
      +

      +

    -

    +

    flat_map public construct/copy/destruct

    1. -
      flat_map() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
      +
      flat_map() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

      Effects: Default constructs an empty flat_map.

      Complexity: Constant.

    2. -
      explicit flat_map(const allocator_type & a);
      +
      explicit flat_map(const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified allocator.

      Complexity: Constant.

    3. -
      explicit flat_map(const Compare & comp);
      +
      explicit flat_map(const Compare & comp);

      Effects: Constructs an empty flat_map using the specified comparison object.

      Complexity: Constant.

    4. -
      flat_map(const Compare & comp, const allocator_type & a);
      +
      flat_map(const Compare & comp, const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified comparison object and allocator.

      Complexity: Constant.

    5. template<typename InputIterator> 
      -  flat_map(InputIterator first, InputIterator last);
      + flat_map(InputIterator first, InputIterator last);

      Effects: Constructs an empty flat_map and and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    6. template<typename InputIterator> 
      -  flat_map(InputIterator first, InputIterator last, const allocator_type & a);
      + flat_map(InputIterator first, InputIterator last, const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified allocator, and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    7. template<typename InputIterator> 
      -  flat_map(InputIterator first, InputIterator last, const Compare & comp);
      + flat_map(InputIterator first, InputIterator last, const Compare & comp);

      Effects: Constructs an empty flat_map using the specified comparison object and and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    8. template<typename InputIterator> 
      -  flat_map(InputIterator first, InputIterator last, const Compare & comp, 
      +  flat_map(InputIterator first, InputIterator last, const Compare & comp, 
                  const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    9. template<typename InputIterator> 
      -  flat_map(ordered_unique_range_t, InputIterator first, InputIterator last);
      + flat_map(ordered_unique_range_t, InputIterator first, InputIterator last);

      Effects: Constructs an empty flat_map and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [first ,last) must be ordered according to the predicate.

      Complexity: Linear in N.

      @@ -281,7 +289,7 @@
    10. template<typename InputIterator> 
      -  flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, 
      +  flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, 
                  const Compare & comp);

      Effects: Constructs an empty flat_map using the specified comparison object and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [first ,last) must be ordered according to the predicate.

      @@ -290,7 +298,7 @@
    11. template<typename InputIterator> 
      -  flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, 
      +  flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, 
                  const Compare & comp, const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified comparison object and allocator, and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [first ,last) must be ordered according to the predicate.

      @@ -298,35 +306,35 @@

      Note: Non-standard extension.

    12. -
      flat_map(std::initializer_list< value_type > il);
      +
      flat_map(std::initializer_list< value_type > il);

      Effects: Constructs an empty flat_map and inserts elements from the range [il.begin() ,il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

    13. -
      flat_map(std::initializer_list< value_type > il, const allocator_type & a);
      +
      flat_map(std::initializer_list< value_type > il, const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified allocator, and inserts elements from the range [il.begin() ,il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

    14. -
      flat_map(std::initializer_list< value_type > il, const Compare & comp);
      +
      flat_map(std::initializer_list< value_type > il, const Compare & comp);

      Effects: Constructs an empty flat_map using the specified comparison object and inserts elements from the range [il.begin() ,il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

    15. -
      flat_map(std::initializer_list< value_type > il, const Compare & comp, 
      +
      flat_map(std::initializer_list< value_type > il, const Compare & comp, 
                const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified comparison object and allocator, and inserts elements from the range [il.begin() ,il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

    16. -
      flat_map(ordered_unique_range_t, std::initializer_list< value_type > il);
      +
      flat_map(ordered_unique_range_t, std::initializer_list< value_type > il);

      Effects: Constructs an empty flat_map using and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      Complexity: Linear in N.

      Note: Non-standard extension.

    17. -
      flat_map(ordered_unique_range_t, std::initializer_list< value_type > il, 
      +
      flat_map(ordered_unique_range_t, std::initializer_list< value_type > il, 
                const Compare & comp);

      Effects: Constructs an empty flat_map using the specified comparison object and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      @@ -334,7 +342,7 @@

      Note: Non-standard extension.

    18. -
      flat_map(ordered_unique_range_t, std::initializer_list< value_type > il, 
      +
      flat_map(ordered_unique_range_t, std::initializer_list< value_type > il, 
                const Compare & comp, const allocator_type & a);

      Effects: Constructs an empty flat_map using the specified comparison object and allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      @@ -342,188 +350,188 @@

      Note: Non-standard extension.

    19. -
      flat_map(const flat_map & x);
      +
      flat_map(const flat_map & x);

      Effects: Copy constructs a flat_map.

      Complexity: Linear in x.size().

    20. -
      flat_map(flat_map && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
      +
      flat_map(flat_map && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

      Effects: Move constructs a flat_map. Constructs *this using x's resources.

      Complexity: Constant.

      Postcondition: x is emptied.

    21. -
      flat_map(const flat_map & x, const allocator_type & a);
      +
      flat_map(const flat_map & x, const allocator_type & a);

      Effects: Copy constructs a flat_map using the specified allocator.

      Complexity: Linear in x.size().

    22. -
      flat_map(flat_map && x, const allocator_type & a);
      +
      flat_map(flat_map && x, const allocator_type & a);

      Effects: Move constructs a flat_map using the specified allocator. Constructs *this using x's resources.

      Complexity: Constant if x.get_allocator() == a, linear otherwise.

    23. -
      flat_map & operator=(const flat_map & x);
      +
      flat_map & operator=(const flat_map & x);

      Effects: Makes *this a copy of x.

      Complexity: Linear in x.size().

    24. -
      flat_map & operator=(flat_map && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
      +
      flat_map & operator=(flat_map && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

      Effects: Move constructs a flat_map. Constructs *this using x's resources.

      Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

      Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

    25. -
      flat_map & operator=(std::initializer_list< value_type > il);
      +
      flat_map & operator=(std::initializer_list< value_type > il);
      Effects: Assign elements from il to *this
    -

    -flat_map public member functions

    +

    +flat_map public member functions

      -
    1.  BOOST_STATIC_ASSERT(unspecified);
    2. +
    3.  BOOST_STATIC_ASSERT(unspecified);
    4. -
      allocator_type get_allocator() const noexcept;
      +
      allocator_type get_allocator() const noexcept;

      Effects: Returns a copy of the allocator that was passed to the object's constructor.

      Complexity: Constant.

    5. -
      stored_allocator_type & get_stored_allocator() noexcept;
      +
      get_stored_allocator_noconst_return_t get_stored_allocator() noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    6. -
      const stored_allocator_type & get_stored_allocator() const noexcept;
      +
      get_stored_allocator_const_return_t get_stored_allocator() const noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    7. -
      iterator begin() noexcept;
      +
      iterator begin() noexcept;

      Effects: Returns an iterator to the first element contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    8. -
      const_iterator begin() const noexcept;
      +
      const_iterator begin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    9. -
      iterator end() noexcept;
      +
      iterator end() noexcept;

      Effects: Returns an iterator to the end of the container.

      Throws: Nothing.

      Complexity: Constant.

    10. -
      const_iterator end() const noexcept;
      +
      const_iterator end() const noexcept;

      Effects: Returns a const_iterator to the end of the container.

      Throws: Nothing.

      Complexity: Constant.

    11. -
      reverse_iterator rbegin() noexcept;
      +
      reverse_iterator rbegin() noexcept;

      Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    12. -
      const_reverse_iterator rbegin() const noexcept;
      +
      const_reverse_iterator rbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    13. -
      reverse_iterator rend() noexcept;
      +
      reverse_iterator rend() noexcept;

      Effects: Returns a reverse_iterator pointing to the end of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    14. -
      const_reverse_iterator rend() const noexcept;
      +
      const_reverse_iterator rend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    15. -
      const_iterator cbegin() const noexcept;
      +
      const_iterator cbegin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    16. -
      const_iterator cend() const noexcept;
      +
      const_iterator cend() const noexcept;

      Effects: Returns a const_iterator to the end of the container.

      Throws: Nothing.

      Complexity: Constant.

    17. -
      const_reverse_iterator crbegin() const noexcept;
      +
      const_reverse_iterator crbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    18. -
      const_reverse_iterator crend() const noexcept;
      +
      const_reverse_iterator crend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    19. -
      bool empty() const noexcept;
      +
      bool empty() const noexcept;

      Effects: Returns true if the container contains no elements.

      Throws: Nothing.

      Complexity: Constant.

    20. -
      size_type size() const noexcept;
      +
      size_type size() const noexcept;

      Effects: Returns the number of the elements contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    21. -
      size_type max_size() const noexcept;
      +
      size_type max_size() const noexcept;

      Effects: Returns the largest possible size of the container.

      Throws: Nothing.

      Complexity: Constant.

    22. -
      size_type capacity() const noexcept;
      +
      size_type capacity() const noexcept;

      Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

      Throws: Nothing.

      Complexity: Constant.

    23. -
      void reserve(size_type cnt);
      -

      Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

      +
      void reserve(size_type cnt);
      +

      Effects: If n is less than or equal to capacity(), or the underlying container has no reserve member, this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

      Throws: If memory allocation allocation throws or T's copy constructor throws.

      Note: If capacity() is less than "cnt", iterators and references to to values might be invalidated.

    24. -
      void shrink_to_fit();
      +
      void shrink_to_fit();
      Effects: Tries to deallocate the excess of memory created

      Throws: If memory allocation throws, or T's copy constructor throws.

      Complexity: Linear to size().

    25. -
      mapped_type & operator[](const key_type & k);
      +
      mapped_type & operator[](const key_type & k);

      Effects: If there is no key equivalent to x in the flat_map, inserts value_type(x, T()) into the flat_map.

      Returns: A reference to the mapped_type corresponding to x in *this.

      Complexity: Logarithmic.

    26. -
      mapped_type & operator[](key_type && k);
      +
      mapped_type & operator[](key_type && k);

      Effects: If there is no key equivalent to x in the flat_map, inserts value_type(move(x), T()) into the flat_map (the key is move-constructed)

      Returns: A reference to the mapped_type corresponding to x in *this.

      Complexity: Logarithmic.

    27. template<typename M> 
      -  std::pair< iterator, bool > insert_or_assign(const key_type & k, M && obj);
      + std::pair< iterator, bool > insert_or_assign(const key_type & k, M && obj);

      Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, forward<M>(obj)).

      No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

      Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

      @@ -531,7 +539,7 @@
    28. template<typename M> 
      -  std::pair< iterator, bool > insert_or_assign(key_type && k, M && obj);
      + std::pair< iterator, bool > insert_or_assign(key_type && k, M && obj);

      Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, move(obj)).

      No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

      Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

      @@ -539,7 +547,7 @@
    29. template<typename M> 
      -  iterator insert_or_assign(const_iterator hint, const key_type & k, M && obj);
      + iterator insert_or_assign(const_iterator hint, const key_type & k, M && obj);

      Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, forward<M>(obj)) and the new element to the container as close as possible to the position just before hint.

      No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

      Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

      @@ -547,14 +555,14 @@
    30. template<typename M> 
      -  iterator insert_or_assign(const_iterator hint, key_type && k, M && obj);
      + iterator insert_or_assign(const_iterator hint, key_type && k, M && obj);

      Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, move(obj)) and the new element to the container as close as possible to the position just before hint.

      No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

      Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

      Complexity: Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before hint.

    31. -
      iterator nth(size_type n) noexcept;
      +
      iterator nth(size_type n) noexcept;

      Requires: size() >= n.

      Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

      Throws: Nothing.

      @@ -562,7 +570,7 @@

      Note: Non-standard extension

    32. -
      const_iterator nth(size_type n) const noexcept;
      +
      const_iterator nth(size_type n) const noexcept;

      Requires: size() >= n.

      Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

      Throws: Nothing.

      @@ -570,7 +578,7 @@

      Note: Non-standard extension

    33. -
      size_type index_of(iterator p) noexcept;
      +
      size_type index_of(iterator p) noexcept;

      Requires: begin() <= p <= end().

      Effects: Returns the index of the element pointed by p and size() if p == end().

      Throws: Nothing.

      @@ -578,7 +586,7 @@

      Note: Non-standard extension

    34. -
      size_type index_of(const_iterator p) const noexcept;
      +
      size_type index_of(const_iterator p) const noexcept;

      Requires: begin() <= p <= end().

      Effects: Returns the index of the element pointed by p and size() if p == end().

      Throws: Nothing.

      @@ -586,19 +594,19 @@

      Note: Non-standard extension

    35. -
      T & at(const key_type & k);
      +
      T & at(const key_type & k);

      Returns: A reference to the element whose key is equivalent to x.

      Throws: An exception object of type out_of_range if no such element is present.

      Complexity: logarithmic.

    36. -
      const T & at(const key_type & k) const;
      +
      const T & at(const key_type & k) const;

      Returns: A reference to the element whose key is equivalent to x.

      Throws: An exception object of type out_of_range if no such element is present.

      Complexity: logarithmic.

    37. -
      template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);
      +
      template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);

      Effects: Inserts an object x of type T constructed with std::forward<Args>(args)... if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

      @@ -606,7 +614,7 @@
    38. template<class... Args> 
      -  iterator emplace_hint(const_iterator hint, Args &&... args);
      + iterator emplace_hint(const_iterator hint, Args &&... args);

      Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the container if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

      @@ -614,7 +622,7 @@
    39. template<class... Args> 
      -  std::pair< iterator, bool > try_emplace(const key_type & k, Args &&... args);
      + std::pair< iterator, bool > try_emplace(const key_type & k, Args &&... args);

      Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

      Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

      Returns: The bool component of the returned pair is true if and only if the insertion took place. The returned iterator points to the map element whose key is equivalent to k.

      @@ -622,7 +630,7 @@
    40. template<class... Args> 
      -  iterator try_emplace(const_iterator hint, const key_type & k, 
      +  iterator try_emplace(const_iterator hint, const key_type & k, 
                              Args &&... args);

      Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

      Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

      @@ -631,7 +639,7 @@
    41. template<class... Args> 
      -  std::pair< iterator, bool > try_emplace(key_type && k, Args &&... args);
      + std::pair< iterator, bool > try_emplace(key_type && k, Args &&... args);

      Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

      Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

      Returns: The bool component of the returned pair is true if and only if the insertion took place. The returned iterator points to the map element whose key is equivalent to k.

      @@ -639,49 +647,49 @@
    42. template<class... Args> 
      -  iterator try_emplace(const_iterator hint, key_type && k, Args &&... args);
      + iterator try_emplace(const_iterator hint, key_type && k, Args &&... args);

      Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

      Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

      Returns: The returned iterator points to the map element whose key is equivalent to k.

      Complexity: Logarithmic in general, but amortized constant if value is inserted right before p.

    43. -
      std::pair< iterator, bool > insert(const value_type & x);
      +
      std::pair< iterator, bool > insert(const value_type & x);

      Effects: Inserts x if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

      Note: If an element is inserted it might invalidate elements.

    44. -
      std::pair< iterator, bool > insert(value_type && x);
      +
      std::pair< iterator, bool > insert(value_type && x);

      Effects: Inserts a new value_type move constructed from the pair if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

      Note: If an element is inserted it might invalidate elements.

    45. -
      std::pair< iterator, bool > insert(movable_value_type && x);
      +
      std::pair< iterator, bool > insert(movable_value_type && x);

      Effects: Inserts a new value_type move constructed from the pair if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

      Note: If an element is inserted it might invalidate elements.

    46. -
      iterator insert(const_iterator p, const value_type & x);
      +
      iterator insert(const_iterator p, const value_type & x);

      Effects: Inserts a copy of x in the container if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

      Note: If an element is inserted it might invalidate elements.

    47. -
      iterator insert(const_iterator p, value_type && x);
      +
      iterator insert(const_iterator p, value_type && x);

      Effects: Inserts an element move constructed from x in the container. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

      Note: If an element is inserted it might invalidate elements.

    48. -
      iterator insert(const_iterator p, movable_value_type && x);
      +
      iterator insert(const_iterator p, movable_value_type && x);

      Effects: Inserts an element move constructed from x in the container. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

      @@ -689,7 +697,7 @@
    49. template<typename InputIterator> 
      -  void insert(InputIterator first, InputIterator last);
      + void insert(InputIterator first, InputIterator last);

      Requires: first, last are not iterators into *this.

      Effects: inserts each element from the range [first,last) if and only if there is no element with key equivalent to the key of that element.

      Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

      @@ -697,7 +705,7 @@
    50. template<typename InputIterator> 
      -  void insert(ordered_unique_range_t, InputIterator first, InputIterator last);
      + void insert(ordered_unique_range_t, InputIterator first, InputIterator last);

      Requires: first, last are not iterators into *this.

      Requires: [first ,last) must be ordered according to the predicate and must be unique values.

      Effects: inserts each element from the range [first,last) if and only if there is no element with key equivalent to the key of that element. This function is more efficient than the normal range creation for ordered ranges.

      @@ -706,13 +714,13 @@

      Note: Non-standard extension.

    51. -
      void insert(std::initializer_list< value_type > il);
      +
      void insert(std::initializer_list< value_type > il);

      Effects: inserts each element from the range [il.begin(), il.end()) if and only if there is no element with key equivalent to the key of that element.

      Complexity: At most N log(size()+N) (N is the distance from il.first() to il.end()) search time plus N*size() insertion time.

      Note: If an element is inserted it might invalidate elements.

    52. -
      void insert(ordered_unique_range_t, std::initializer_list< value_type > il);
      +
      void insert(ordered_unique_range_t, std::initializer_list< value_type > il);

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      Effects: inserts each element from the range [il.begin(), il.end()) if and only if there is no element with key equivalent to the key of that element. This function is more efficient than the normal range creation for ordered ranges.

      Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

      @@ -720,7 +728,8 @@

      Note: Non-standard extension.

    53. -
      template<typename C2> void merge(flat_map< Key, T, C2, Allocator > & source);
      +
      template<typename C2> 
      +  void merge(flat_map< Key, T, C2, AllocatorOrContainer > & source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -728,7 +737,8 @@

      Complexity: N log(a.size() + N) (N has the value source.size())

    54. -
      template<typename C2> void merge(flat_map< Key, T, C2, Allocator > && source);
      +
      template<typename C2> 
      +  void merge(flat_map< Key, T, C2, AllocatorOrContainer > && source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -737,7 +747,7 @@
    55. template<typename C2> 
      -  void merge(flat_multimap< Key, T, C2, Allocator > & source);
      + void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > & source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -746,7 +756,7 @@
    56. template<typename C2> 
      -  void merge(flat_multimap< Key, T, C2, Allocator > && source);
      + void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > && source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -754,108 +764,108 @@

      Complexity: N log(a.size() + N) (N has the value source.size())

    57. -
      iterator erase(const_iterator p);
      +
      iterator erase(const_iterator p);

      Effects: Erases the element pointed to by p.

      Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

      Complexity: Linear to the elements with keys bigger than p

      Note: Invalidates elements with keys not less than the erased element.

    58. -
      size_type erase(const key_type & x);
      +
      size_type erase(const key_type & x);

      Effects: Erases all elements in the container with key equivalent to x.

      Returns: Returns the number of erased elements.

      Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

    59. -
      iterator erase(const_iterator first, const_iterator last);
      +
      iterator erase(const_iterator first, const_iterator last);

      Effects: Erases all the elements in the range [first, last).

      Returns: Returns last.

      Complexity: size()*N where N is the distance from first to last.

      Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

    60. -
      void swap(flat_map & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
      +
      void swap(flat_map & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

      Effects: Swaps the contents of *this and x.

      Throws: Nothing.

      Complexity: Constant.

    61. -
      void clear() noexcept;
      +
      void clear() noexcept;

      Effects: erase(a.begin(),a.end()).

      Postcondition: size() == 0.

      Complexity: linear in size().

    62. -
      key_compare key_comp() const;
      +
      key_compare key_comp() const;

      Effects: Returns the comparison object out of which a was constructed.

      Complexity: Constant.

    63. -
      value_compare value_comp() const;
      +
      value_compare value_comp() const;

      Effects: Returns an object of value_compare constructed out of the comparison object.

      Complexity: Constant.

    64. -
      iterator find(const key_type & x);
      +
      iterator find(const key_type & x);

      Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

      Complexity: Logarithmic.

    65. -
      const_iterator find(const key_type & x) const;
      +
      const_iterator find(const key_type & x) const;

      Returns: A const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

      Complexity: Logarithmic.

    66. -
      size_type count(const key_type & x) const;
      +
      size_type count(const key_type & x) const;

      Returns: The number of elements with key equivalent to x.

      Complexity: log(size())+count(k)

    67. -
      iterator lower_bound(const key_type & x);
      +
      iterator lower_bound(const key_type & x);

      Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

      Complexity: Logarithmic.

    68. -
      const_iterator lower_bound(const key_type & x) const;
      +
      const_iterator lower_bound(const key_type & x) const;

      Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

      Complexity: Logarithmic.

    69. -
      iterator upper_bound(const key_type & x);
      +
      iterator upper_bound(const key_type & x);

      Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

      Complexity: Logarithmic.

    70. -
      const_iterator upper_bound(const key_type & x) const;
      +
      const_iterator upper_bound(const key_type & x) const;

      Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

      Complexity: Logarithmic.

    71. -
      std::pair< iterator, iterator > equal_range(const key_type & x);
      +
      std::pair< iterator, iterator > equal_range(const key_type & x);

      Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

      Complexity: Logarithmic.

    72. std::pair< const_iterator, const_iterator > 
      -equal_range(const key_type & x) const;
      +equal_range(const key_type & x) const;

      Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

      Complexity: Logarithmic.

    73. -
      sequence_type extract_sequence();
      +
      sequence_type extract_sequence();

      Effects: Extracts the internal sequence container.

      Complexity: Same as the move constructor of sequence_type, usually constant.

      Postcondition: this->empty()

      Throws: If secuence_type's move constructor throws

    74. -
      void adopt_sequence(sequence_type && seq);
      +
      void adopt_sequence(sequence_type && seq);

      Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment. Erases non-unique elements.

      Complexity: Assuming O(1) move assignment, O(NlogN) with N = seq.size()

      Throws: If the comparison or the move constructor throws

    75. -
      void adopt_sequence(ordered_unique_range_t, sequence_type && seq);
      +
      void adopt_sequence(ordered_unique_range_t, sequence_type && seq);

      Requires: seq shall be ordered according to this->compare() and shall contain unique elements.

      Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment.

      Complexity: Assuming O(1) move assignment, O(1)

      @@ -864,41 +874,41 @@
    -

    -flat_map friend functions

    +

    +flat_map friend functions

    1. -
      friend bool operator==(const flat_map & x, const flat_map & y);
      +
      friend bool operator==(const flat_map & x, const flat_map & y);

      Effects: Returns true if x and y are equal

      Complexity: Linear to the number of elements in the container.

    2. -
      friend bool operator!=(const flat_map & x, const flat_map & y);
      +
      friend bool operator!=(const flat_map & x, const flat_map & y);

      Effects: Returns true if x and y are unequal

      Complexity: Linear to the number of elements in the container.

    3. -
      friend bool operator<(const flat_map & x, const flat_map & y);
      +
      friend bool operator<(const flat_map & x, const flat_map & y);

      Effects: Returns true if x is less than y

      Complexity: Linear to the number of elements in the container.

    4. -
      friend bool operator>(const flat_map & x, const flat_map & y);
      +
      friend bool operator>(const flat_map & x, const flat_map & y);

      Effects: Returns true if x is greater than y

      Complexity: Linear to the number of elements in the container.

    5. -
      friend bool operator<=(const flat_map & x, const flat_map & y);
      +
      friend bool operator<=(const flat_map & x, const flat_map & y);

      Effects: Returns true if x is equal or less than y

      Complexity: Linear to the number of elements in the container.

    6. -
      friend bool operator>=(const flat_map & x, const flat_map & y);
      +
      friend bool operator>=(const flat_map & x, const flat_map & y);

      Effects: Returns true if x is equal or greater than y

      Complexity: Linear to the number of elements in the container.

    7. -
      friend void swap(flat_map & x, flat_map & y);
      +
      friend void swap(flat_map & x, flat_map & y);

      Effects: x.swap(y)

      Complexity: Constant.

    8. diff --git a/doc/html/boost/container/flat_multimap.html b/doc/html/boost/container/flat_multimap.html index 3d20b9e1ac..d04e988ea8 100644 --- a/doc/html/boost/container/flat_multimap.html +++ b/doc/html/boost/container/flat_multimap.html @@ -33,158 +33,160 @@
      // In header: <boost/container/flat_map.hpp>
       
       template<typename Key, typename T, typename Compare = std::less<Key>, 
      -         typename Allocator = new_allocator< std::pair< Key, T> > > 
      +         typename AllocatorOrContainer = new_allocator< std::pair< Key, T> > > 
       class flat_multimap {
       public:
         // types
      -  typedef Key                                                              key_type;              
      -  typedef T                                                                mapped_type;           
      -  typedef std::pair< Key, T >                                              value_type;            
      -  typedef ::boost::container::allocator_traits< Allocator >                allocator_traits_type; 
      -  typedef boost::container::allocator_traits< Allocator >::pointer         pointer;               
      -  typedef boost::container::allocator_traits< Allocator >::const_pointer   const_pointer;         
      -  typedef boost::container::allocator_traits< Allocator >::reference       reference;             
      -  typedef boost::container::allocator_traits< Allocator >::const_reference const_reference;       
      -  typedef boost::container::allocator_traits< Allocator >::size_type       size_type;             
      -  typedef boost::container::allocator_traits< Allocator >::difference_type difference_type;       
      -  typedef Allocator                                                        allocator_type;        
      -  typedef implementation_defined                                           stored_allocator_type; 
      -  typedef implementation_defined                                           value_compare;         
      -  typedef Compare                                                          key_compare;           
      -  typedef implementation_defined                                           iterator;              
      -  typedef implementation_defined                                           const_iterator;        
      -  typedef implementation_defined                                           reverse_iterator;      
      -  typedef implementation_defined                                           const_reverse_iterator;
      -  typedef implementation_defined                                           movable_value_type;    
      -  typedef implementation_defined                                           sequence_type;         
      +  typedef Key                                                    key_type;              
      +  typedef T                                                      mapped_type;           
      +  typedef Compare                                                key_compare;           
      +  typedef std::pair< Key, T >                                    value_type;            
      +  typedef implementation_defined                                 sequence_type;         
      +  typedef sequence_type::allocator_type                          allocator_type;        
      +  typedef ::boost::container::allocator_traits< allocator_type > allocator_traits_type; 
      +  typedef sequence_type::pointer                                 pointer;               
      +  typedef sequence_type::const_pointer                           const_pointer;         
      +  typedef sequence_type::reference                               reference;             
      +  typedef sequence_type::const_reference                         const_reference;       
      +  typedef sequence_type::size_type                               size_type;             
      +  typedef sequence_type::difference_type                         difference_type;       
      +  typedef implementation_defined                                 stored_allocator_type; 
      +  typedef implementation_defined                                 value_compare;         
      +  typedef sequence_type::iterator                                iterator;              
      +  typedef sequence_type::const_iterator                          const_iterator;        
      +  typedef sequence_type::reverse_iterator                        reverse_iterator;      
      +  typedef sequence_type::const_reverse_iterator                  const_reverse_iterator;
      +  typedef implementation_defined                                 movable_value_type;    
       
         // construct/copy/destruct
      -  flat_multimap() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
      -  explicit flat_multimap(const allocator_type &);
      -  explicit flat_multimap(const Compare &);
      -  flat_multimap(const Compare &, const allocator_type &);
      -  template<typename InputIterator> flat_multimap(InputIterator, InputIterator);
      +  flat_multimap() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
      +  explicit flat_multimap(const allocator_type &);
      +  explicit flat_multimap(const Compare &);
      +  flat_multimap(const Compare &, const allocator_type &);
      +  template<typename InputIterator> flat_multimap(InputIterator, InputIterator);
         template<typename InputIterator> 
      -    flat_multimap(InputIterator, InputIterator, const allocator_type &);
      +    flat_multimap(InputIterator, InputIterator, const allocator_type &);
         template<typename InputIterator> 
      -    flat_multimap(InputIterator, InputIterator, const Compare &);
      +    flat_multimap(InputIterator, InputIterator, const Compare &);
         template<typename InputIterator> 
      -    flat_multimap(InputIterator, InputIterator, const Compare &, 
      +    flat_multimap(InputIterator, InputIterator, const Compare &, 
                         const allocator_type &);
         template<typename InputIterator> 
      -    flat_multimap(ordered_range_t, InputIterator, InputIterator);
      +    flat_multimap(ordered_range_t, InputIterator, InputIterator);
         template<typename InputIterator> 
      -    flat_multimap(ordered_range_t, InputIterator, InputIterator, 
      +    flat_multimap(ordered_range_t, InputIterator, InputIterator, 
                         const Compare &);
         template<typename InputIterator> 
      -    flat_multimap(ordered_range_t, InputIterator, InputIterator, 
      +    flat_multimap(ordered_range_t, InputIterator, InputIterator, 
                         const Compare &, const allocator_type &);
      -  flat_multimap(std::initializer_list< value_type >);
      -  flat_multimap(std::initializer_list< value_type >, const allocator_type &);
      -  flat_multimap(std::initializer_list< value_type >, const Compare &);
      -  flat_multimap(std::initializer_list< value_type >, const Compare &, 
      +  flat_multimap(std::initializer_list< value_type >);
      +  flat_multimap(std::initializer_list< value_type >, const allocator_type &);
      +  flat_multimap(std::initializer_list< value_type >, const Compare &);
      +  flat_multimap(std::initializer_list< value_type >, const Compare &, 
                       const allocator_type &);
      -  flat_multimap(ordered_range_t, std::initializer_list< value_type >);
      -  flat_multimap(ordered_range_t, std::initializer_list< value_type >, 
      +  flat_multimap(ordered_range_t, std::initializer_list< value_type >);
      +  flat_multimap(ordered_range_t, std::initializer_list< value_type >, 
                       const Compare &);
      -  flat_multimap(ordered_range_t, std::initializer_list< value_type >, 
      +  flat_multimap(ordered_range_t, std::initializer_list< value_type >, 
                       const Compare &, const allocator_type &);
      -  flat_multimap(const flat_multimap &);
      -  flat_multimap(flat_multimap &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
      -  flat_multimap(const flat_multimap &, const allocator_type &);
      -  flat_multimap(flat_multimap &&, const allocator_type &);
      -  flat_multimap & operator=(const flat_multimap &);
      +  flat_multimap(const flat_multimap &);
      +  flat_multimap(flat_multimap &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
      +  flat_multimap(const flat_multimap &, const allocator_type &);
      +  flat_multimap(flat_multimap &&, const allocator_type &);
      +  flat_multimap & operator=(const flat_multimap &);
         flat_multimap & 
      -  operator=(flat_multimap &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
      -  flat_multimap & operator=(std::initializer_list< value_type >);
      +  operator=(flat_multimap &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
      +  flat_multimap & operator=(std::initializer_list< value_type >);
       
      -  // public member functions
      -   BOOST_STATIC_ASSERT(unspecified);
      -  allocator_type get_allocator() const noexcept;
      -  stored_allocator_type & get_stored_allocator() noexcept;
      -  const stored_allocator_type & get_stored_allocator() const noexcept;
      -  iterator begin() noexcept;
      -  const_iterator begin() const noexcept;
      -  iterator end() noexcept;
      -  const_iterator end() const noexcept;
      -  reverse_iterator rbegin() noexcept;
      -  const_reverse_iterator rbegin() const noexcept;
      -  reverse_iterator rend() noexcept;
      -  const_reverse_iterator rend() const noexcept;
      -  const_iterator cbegin() const noexcept;
      -  const_iterator cend() const noexcept;
      -  const_reverse_iterator crbegin() const noexcept;
      -  const_reverse_iterator crend() const noexcept;
      -  bool empty() const noexcept;
      -  size_type size() const noexcept;
      -  size_type max_size() const noexcept;
      -  size_type capacity() const noexcept;
      -  void reserve(size_type);
      -  void shrink_to_fit();
      -  iterator nth(size_type) noexcept;
      -  const_iterator nth(size_type) const noexcept;
      -  size_type index_of(iterator) noexcept;
      -  size_type index_of(const_iterator) const noexcept;
      -  template<class... Args> iterator emplace(Args &&...);
      -  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
      -  iterator insert(const value_type &);
      -  iterator insert(value_type &&);
      -  iterator insert(impl_value_type &&);
      -  iterator insert(const_iterator, const value_type &);
      -  iterator insert(const_iterator, value_type &&);
      -  iterator insert(const_iterator, impl_value_type &&);
      -  template<typename InputIterator> void insert(InputIterator, InputIterator);
      +  // public member functions
      +   BOOST_STATIC_ASSERT(unspecified);
      +  allocator_type get_allocator() const noexcept;
      +  stored_allocator_type & get_stored_allocator() noexcept;
      +  const stored_allocator_type & get_stored_allocator() const noexcept;
      +  iterator begin() noexcept;
      +  const_iterator begin() const noexcept;
      +  iterator end() noexcept;
      +  const_iterator end() const noexcept;
      +  reverse_iterator rbegin() noexcept;
      +  const_reverse_iterator rbegin() const noexcept;
      +  reverse_iterator rend() noexcept;
      +  const_reverse_iterator rend() const noexcept;
      +  const_iterator cbegin() const noexcept;
      +  const_iterator cend() const noexcept;
      +  const_reverse_iterator crbegin() const noexcept;
      +  const_reverse_iterator crend() const noexcept;
      +  bool empty() const noexcept;
      +  size_type size() const noexcept;
      +  size_type max_size() const noexcept;
      +  size_type capacity() const noexcept;
      +  void reserve(size_type);
      +  void shrink_to_fit();
      +  iterator nth(size_type) noexcept;
      +  const_iterator nth(size_type) const noexcept;
      +  size_type index_of(iterator) noexcept;
      +  size_type index_of(const_iterator) const noexcept;
      +  template<class... Args> iterator emplace(Args &&...);
      +  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
      +  iterator insert(const value_type &);
      +  iterator insert(value_type &&);
      +  iterator insert(impl_value_type &&);
      +  iterator insert(const_iterator, const value_type &);
      +  iterator insert(const_iterator, value_type &&);
      +  iterator insert(const_iterator, impl_value_type &&);
      +  template<typename InputIterator> void insert(InputIterator, InputIterator);
         template<typename InputIterator> 
      -    void insert(ordered_range_t, InputIterator, InputIterator);
      -  void insert(std::initializer_list< value_type >);
      -  void insert(ordered_range_t, std::initializer_list< value_type >);
      -  template<typename C2> void merge(flat_multimap< Key, T, C2, Allocator > &);
      -  template<typename C2> void merge(flat_multimap< Key, T, C2, Allocator > &&);
      -  template<typename C2> void merge(flat_map< Key, T, C2, Allocator > &);
      -  template<typename C2> void merge(flat_map< Key, T, C2, Allocator > &&);
      -  iterator erase(const_iterator);
      -  size_type erase(const key_type &);
      -  iterator erase(const_iterator, const_iterator);
      -  void swap(flat_multimap &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
      -  void clear() noexcept;
      -  key_compare key_comp() const;
      -  value_compare value_comp() const;
      -  iterator find(const key_type &);
      -  const_iterator find(const key_type &) const;
      -  size_type count(const key_type &) const;
      -  iterator lower_bound(const key_type &);
      -  const_iterator lower_bound(const key_type &) const;
      -  iterator upper_bound(const key_type &);
      -  const_iterator upper_bound(const key_type &) const;
      -  std::pair< iterator, iterator > equal_range(const key_type &);
      +    void insert(ordered_range_t, InputIterator, InputIterator);
      +  void insert(std::initializer_list< value_type >);
      +  void insert(ordered_range_t, std::initializer_list< value_type >);
      +  template<typename C2> 
      +    void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > &);
      +  template<typename C2> 
      +    void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > &&);
      +  template<typename C2> 
      +    void merge(flat_map< Key, T, C2, AllocatorOrContainer > &);
      +  template<typename C2> 
      +    void merge(flat_map< Key, T, C2, AllocatorOrContainer > &&);
      +  iterator erase(const_iterator);
      +  size_type erase(const key_type &);
      +  iterator erase(const_iterator, const_iterator);
      +  void swap(flat_multimap &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
      +  void clear() noexcept;
      +  key_compare key_comp() const;
      +  value_compare value_comp() const;
      +  iterator find(const key_type &);
      +  const_iterator find(const key_type &) const;
      +  size_type count(const key_type &) const;
      +  iterator lower_bound(const key_type &);
      +  const_iterator lower_bound(const key_type &) const;
      +  iterator upper_bound(const key_type &);
      +  const_iterator upper_bound(const key_type &) const;
      +  std::pair< iterator, iterator > equal_range(const key_type &);
         std::pair< const_iterator, const_iterator > 
      -  equal_range(const key_type &) const;
      -  sequence_type extract_sequence();
      -  void adopt_sequence(sequence_type &&);
      -  void adopt_sequence(ordered_range_t, sequence_type &&);
      +  equal_range(const key_type &) const;
      +  sequence_type extract_sequence();
      +  void adopt_sequence(sequence_type &&);
      +  void adopt_sequence(ordered_range_t, sequence_type &&);
       
      -  // friend functions
      -  friend bool operator==(const flat_multimap &, const flat_multimap &);
      -  friend bool operator!=(const flat_multimap &, const flat_multimap &);
      -  friend bool operator<(const flat_multimap &, const flat_multimap &);
      -  friend bool operator>(const flat_multimap &, const flat_multimap &);
      -  friend bool operator<=(const flat_multimap &, const flat_multimap &);
      -  friend bool operator>=(const flat_multimap &, const flat_multimap &);
      -  friend void swap(flat_multimap &, flat_multimap &);
      +  // friend functions
      +  friend bool operator==(const flat_multimap &, const flat_multimap &);
      +  friend bool operator!=(const flat_multimap &, const flat_multimap &);
      +  friend bool operator<(const flat_multimap &, const flat_multimap &);
      +  friend bool operator>(const flat_multimap &, const flat_multimap &);
      +  friend bool operator<=(const flat_multimap &, const flat_multimap &);
      +  friend bool operator>=(const flat_multimap &, const flat_multimap &);
      +  friend void swap(flat_multimap &, flat_multimap &);
       };
      -

      Description

      -

      A flat_multimap is a kind of associative container that supports equivalent keys (possibly containing multiple copies of the same key value) and provides for fast retrieval of values of another type T based on the keys. The flat_multimap class supports random-access iterators.

      +

      Description

      +

      A flat_multimap is a kind of associative container that supports equivalent keys (possibly containing multiple copies of the same key value) and provides for fast retrieval of values of another type T based on the keys.

      A flat_multimap satisfies all of the requirements of a container and of a reversible container and of an associative container. For a flat_multimap<Key,T> the key_type is Key and the value_type is std::pair<Key,T> (unlike std::multimap<Key, T> which value_type is std::pair<const Key, T>).

      -

      Compare is the ordering function for Keys (e.g. std::less<Key>).

      -

      Allocator is the allocator to allocate the value_types (e.g. allocator< std::pair<Key, T> >).

      -

      flat_multimap is similar to std::multimap but it's implemented like an ordered vector. This means that inserting a new element into a flat_map invalidates previous iterators and references

      -

      Erasing an element invalidates iterators and references pointing to elements that come after (their keys are bigger) the erased element.

      +

      flat_multimap is similar to std::multimap but it's implemented by as an ordered sequence container. The underlying sequence container is by default vector but it can also work user-provided vector-like SequenceContainers (like static_vector or small_vector).

      +

      Using vector-like sequence containers means that inserting a new element into a flat_multimap might invalidate previous iterators and references (unless that sequence container is stable_vector or a similar container that offers stable pointers and references). Similarly, erasing an element might invalidate iterators and references pointing to elements that come after (their keys are bigger) the erased element.

      This container provides random-access iterators.

      -

      Template Parameters

      +

      Template Parameters

      1. typename Key
        @@ -196,66 +198,72 @@

        is the ordering function for Keys (e.g. std::less<Key>).

      2. -
        typename Allocator = new_allocator< std::pair< Key, T> >
        -

        is the allocator to allocate the value_types (e.g. allocator< std::pair<Key, T> > ).

        +
        typename AllocatorOrContainer = new_allocator< std::pair< Key, T> >
        +

        is either:

        +
          +
        • The allocator to allocate value_types (e.g. allocator< std::pair<Key, T> > ). (in this case sequence_type will be vector<value_type, AllocatorOrContainer>)

        • +
        • The SequenceContainer to be used as the underlying sequence_type. It must be a vector-like sequence container with random-access iterators.

        • +
        +

        +

      -

      +

      flat_multimap public construct/copy/destruct

      1. -
        flat_multimap() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
        +
        flat_multimap() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

        Effects: Default constructs an empty flat_map.

        Complexity: Constant.

      2. -
        explicit flat_multimap(const allocator_type & a);
        +
        explicit flat_multimap(const allocator_type & a);

        Effects: Constructs an empty flat_multimap using the specified allocator.

        Complexity: Constant.

      3. -
        explicit flat_multimap(const Compare & comp);
        +
        explicit flat_multimap(const Compare & comp);

        Effects: Constructs an empty flat_multimap using the specified comparison object .

        Complexity: Constant.

      4. -
        flat_multimap(const Compare & comp, const allocator_type & a);
        +
        flat_multimap(const Compare & comp, const allocator_type & a);

        Effects: Constructs an empty flat_multimap using the specified comparison object and allocator.

        Complexity: Constant.

      5. template<typename InputIterator> 
        -  flat_multimap(InputIterator first, InputIterator last);
        + flat_multimap(InputIterator first, InputIterator last);

        Effects: Constructs an empty flat_multimap and inserts elements from the range [first ,last ).

        Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

      6. template<typename InputIterator> 
        -  flat_multimap(InputIterator first, InputIterator last, 
        +  flat_multimap(InputIterator first, InputIterator last, 
                         const allocator_type & a);

        Effects: Constructs an empty flat_multimap using the specified allocator, and inserts elements from the range [first ,last ).

        Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

      7. template<typename InputIterator> 
        -  flat_multimap(InputIterator first, InputIterator last, const Compare & comp);
        + flat_multimap(InputIterator first, InputIterator last, const Compare & comp);

        Effects: Constructs an empty flat_multimap using the specified comparison object and inserts elements from the range [first ,last ).

        Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

      8. template<typename InputIterator> 
        -  flat_multimap(InputIterator first, InputIterator last, const Compare & comp, 
        +  flat_multimap(InputIterator first, InputIterator last, const Compare & comp, 
                         const allocator_type & a);

        Effects: Constructs an empty flat_multimap using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

        Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

      9. template<typename InputIterator> 
        -  flat_multimap(ordered_range_t, InputIterator first, InputIterator last);
        + flat_multimap(ordered_range_t, InputIterator first, InputIterator last);

        Effects: Constructs an empty flat_multimap and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

        Requires: [first ,last) must be ordered according to the predicate.

        Complexity: Linear in N.

        @@ -263,7 +271,7 @@
      10. template<typename InputIterator> 
        -  flat_multimap(ordered_range_t, InputIterator first, InputIterator last, 
        +  flat_multimap(ordered_range_t, InputIterator first, InputIterator last, 
                         const Compare & comp);

        Effects: Constructs an empty flat_multimap using the specified comparison object and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

        Requires: [first ,last) must be ordered according to the predicate.

        @@ -272,7 +280,7 @@
      11. template<typename InputIterator> 
        -  flat_multimap(ordered_range_t, InputIterator first, InputIterator last, 
        +  flat_multimap(ordered_range_t, InputIterator first, InputIterator last, 
                         const Compare & comp, const allocator_type & a);

        Effects: Constructs an empty flat_multimap using the specified comparison object and allocator, and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

        Requires: [first ,last) must be ordered according to the predicate.

        @@ -280,36 +288,36 @@

        Note: Non-standard extension.

      12. -
        flat_multimap(std::initializer_list< value_type > il);
        +
        flat_multimap(std::initializer_list< value_type > il);

        Effects: Constructs an empty flat_map and inserts elements from the range [il.begin(), il.end()).

        Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

      13. -
        flat_multimap(std::initializer_list< value_type > il, 
        +
        flat_multimap(std::initializer_list< value_type > il, 
                       const allocator_type & a);

        Effects: Constructs an empty flat_map using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

        Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

      14. -
        flat_multimap(std::initializer_list< value_type > il, const Compare & comp);
        +
        flat_multimap(std::initializer_list< value_type > il, const Compare & comp);

        Effects: Constructs an empty flat_map using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

        Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

      15. -
        flat_multimap(std::initializer_list< value_type > il, const Compare & comp, 
        +
        flat_multimap(std::initializer_list< value_type > il, const Compare & comp, 
                       const allocator_type & a);

        Effects: Constructs an empty flat_map using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

        Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is last - first.

      16. -
        flat_multimap(ordered_range_t, std::initializer_list< value_type > il);
        +
        flat_multimap(ordered_range_t, std::initializer_list< value_type > il);

        Effects: Constructs an empty flat_multimap and inserts elements from the ordered range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

        Requires: [il.begin(), il.end()) must be ordered according to the predicate.

        Complexity: Linear in N.

        Note: Non-standard extension.

      17. -
        flat_multimap(ordered_range_t, std::initializer_list< value_type > il, 
        +
        flat_multimap(ordered_range_t, std::initializer_list< value_type > il, 
                       const Compare & comp);

        Effects: Constructs an empty flat_multimap using the specified comparison object and inserts elements from the ordered range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

        Requires: [il.begin(), il.end()) must be ordered according to the predicate.

        @@ -317,7 +325,7 @@

        Note: Non-standard extension.

      18. -
        flat_multimap(ordered_range_t, std::initializer_list< value_type > il, 
        +
        flat_multimap(ordered_range_t, std::initializer_list< value_type > il, 
                       const Compare & comp, const allocator_type & a);

        Effects: Constructs an empty flat_multimap using the specified comparison object and allocator, and inserts elements from the ordered range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

        Requires: [il.begin(), il.end()) must be ordered according to the predicate.

        @@ -325,177 +333,177 @@

        Note: Non-standard extension.

      19. -
        flat_multimap(const flat_multimap & x);
        +
        flat_multimap(const flat_multimap & x);

        Effects: Copy constructs a flat_multimap.

        Complexity: Linear in x.size().

      20. -
        flat_multimap(flat_multimap && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
        +
        flat_multimap(flat_multimap && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

        Effects: Move constructs a flat_multimap. Constructs *this using x's resources.

        Complexity: Constant.

        Postcondition: x is emptied.

      21. -
        flat_multimap(const flat_multimap & x, const allocator_type & a);
        +
        flat_multimap(const flat_multimap & x, const allocator_type & a);

        Effects: Copy constructs a flat_multimap using the specified allocator.

        Complexity: Linear in x.size().

      22. -
        flat_multimap(flat_multimap && x, const allocator_type & a);
        +
        flat_multimap(flat_multimap && x, const allocator_type & a);

        Effects: Move constructs a flat_multimap using the specified allocator. Constructs *this using x's resources.

        Complexity: Constant if a == x.get_allocator(), linear otherwise.

      23. -
        flat_multimap & operator=(const flat_multimap & x);
        +
        flat_multimap & operator=(const flat_multimap & x);

        Effects: Makes *this a copy of x.

        Complexity: Linear in x.size().

      24. flat_multimap & 
        -operator=(flat_multimap && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
        +operator=(flat_multimap && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

        Effects: this->swap(x.get()).

        Complexity: Constant.

      25. -
        flat_multimap & operator=(std::initializer_list< value_type > il);
        +
        flat_multimap & operator=(std::initializer_list< value_type > il);

        Effects: Assign content of il to *this

        Complexity: Linear in il.size().

      -

      -flat_multimap public member functions

      +

      +flat_multimap public member functions

        -
      1.  BOOST_STATIC_ASSERT(unspecified);
      2. +
      3.  BOOST_STATIC_ASSERT(unspecified);
      4. -
        allocator_type get_allocator() const noexcept;
        +
        allocator_type get_allocator() const noexcept;

        Effects: Returns a copy of the allocator that was passed to the object's constructor.

        Complexity: Constant.

      5. -
        stored_allocator_type & get_stored_allocator() noexcept;
        +
        stored_allocator_type & get_stored_allocator() noexcept;

        Effects: Returns a reference to the internal allocator.

        Throws: Nothing

        Complexity: Constant.

        Note: Non-standard extension.

      6. -
        const stored_allocator_type & get_stored_allocator() const noexcept;
        +
        const stored_allocator_type & get_stored_allocator() const noexcept;

        Effects: Returns a reference to the internal allocator.

        Throws: Nothing

        Complexity: Constant.

        Note: Non-standard extension.

      7. -
        iterator begin() noexcept;
        +
        iterator begin() noexcept;

        Effects: Returns an iterator to the first element contained in the container.

        Throws: Nothing.

        Complexity: Constant.

      8. -
        const_iterator begin() const noexcept;
        +
        const_iterator begin() const noexcept;

        Effects: Returns a const_iterator to the first element contained in the container.

        Throws: Nothing.

        Complexity: Constant.

      9. -
        iterator end() noexcept;
        +
        iterator end() noexcept;

        Effects: Returns an iterator to the end of the container.

        Throws: Nothing.

        Complexity: Constant.

      10. -
        const_iterator end() const noexcept;
        +
        const_iterator end() const noexcept;

        Effects: Returns a const_iterator to the end of the container.

        Throws: Nothing.

        Complexity: Constant.

      11. -
        reverse_iterator rbegin() noexcept;
        +
        reverse_iterator rbegin() noexcept;

        Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

        Throws: Nothing.

        Complexity: Constant.

      12. -
        const_reverse_iterator rbegin() const noexcept;
        +
        const_reverse_iterator rbegin() const noexcept;

        Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

        Throws: Nothing.

        Complexity: Constant.

      13. -
        reverse_iterator rend() noexcept;
        +
        reverse_iterator rend() noexcept;

        Effects: Returns a reverse_iterator pointing to the end of the reversed container.

        Throws: Nothing.

        Complexity: Constant.

      14. -
        const_reverse_iterator rend() const noexcept;
        +
        const_reverse_iterator rend() const noexcept;

        Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

        Throws: Nothing.

        Complexity: Constant.

      15. -
        const_iterator cbegin() const noexcept;
        +
        const_iterator cbegin() const noexcept;

        Effects: Returns a const_iterator to the first element contained in the container.

        Throws: Nothing.

        Complexity: Constant.

      16. -
        const_iterator cend() const noexcept;
        +
        const_iterator cend() const noexcept;

        Effects: Returns a const_iterator to the end of the container.

        Throws: Nothing.

        Complexity: Constant.

      17. -
        const_reverse_iterator crbegin() const noexcept;
        +
        const_reverse_iterator crbegin() const noexcept;

        Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

        Throws: Nothing.

        Complexity: Constant.

      18. -
        const_reverse_iterator crend() const noexcept;
        +
        const_reverse_iterator crend() const noexcept;

        Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

        Throws: Nothing.

        Complexity: Constant.

      19. -
        bool empty() const noexcept;
        +
        bool empty() const noexcept;

        Effects: Returns true if the container contains no elements.

        Throws: Nothing.

        Complexity: Constant.

      20. -
        size_type size() const noexcept;
        +
        size_type size() const noexcept;

        Effects: Returns the number of the elements contained in the container.

        Throws: Nothing.

        Complexity: Constant.

      21. -
        size_type max_size() const noexcept;
        +
        size_type max_size() const noexcept;

        Effects: Returns the largest possible size of the container.

        Throws: Nothing.

        Complexity: Constant.

      22. -
        size_type capacity() const noexcept;
        +
        size_type capacity() const noexcept;

        Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

        Throws: Nothing.

        Complexity: Constant.

      23. -
        void reserve(size_type cnt);
        -

        Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

        +
        void reserve(size_type cnt);
        +

        Effects: If n is less than or equal to capacity(), or the underlying container has no reserve member, this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

        Throws: If memory allocation allocation throws or T's copy constructor throws.

        Note: If capacity() is less than "cnt", iterators and references to to values might be invalidated.

      24. -
        void shrink_to_fit();
        +
        void shrink_to_fit();
        Effects: Tries to deallocate the excess of memory created

        Throws: If memory allocation throws, or T's copy constructor throws.

        Complexity: Linear to size().

      25. -
        iterator nth(size_type n) noexcept;
        +
        iterator nth(size_type n) noexcept;

        Requires: size() >= n.

        Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

        Throws: Nothing.

        @@ -503,7 +511,7 @@

        Note: Non-standard extension

      26. -
        const_iterator nth(size_type n) const noexcept;
        +
        const_iterator nth(size_type n) const noexcept;

        Requires: size() >= n.

        Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

        Throws: Nothing.

        @@ -511,7 +519,7 @@

        Note: Non-standard extension

      27. -
        size_type index_of(iterator p) noexcept;
        +
        size_type index_of(iterator p) noexcept;

        Requires: begin() <= p <= end().

        Effects: Returns the index of the element pointed by p and size() if p == end().

        Throws: Nothing.

        @@ -519,7 +527,7 @@

        Note: Non-standard extension

      28. -
        size_type index_of(const_iterator p) const noexcept;
        +
        size_type index_of(const_iterator p) const noexcept;

        Requires: begin() <= p <= end().

        Effects: Returns the index of the element pointed by p and size() if p == end().

        Throws: Nothing.

        @@ -527,53 +535,53 @@

        Note: Non-standard extension

      29. -
        template<class... Args> iterator emplace(Args &&... args);
        +
        template<class... Args> iterator emplace(Args &&... args);

        Effects: Inserts an object of type T constructed with std::forward<Args>(args)... and returns the iterator pointing to the newly inserted element.

        Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      30. template<class... Args> 
        -  iterator emplace_hint(const_iterator hint, Args &&... args);
        + iterator emplace_hint(const_iterator hint, Args &&... args);

        Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the container. p is a hint pointing to where the insert should start to search.

        Returns: An iterator pointing to the element with key equivalent to the key of x.

        Complexity: Logarithmic search time (constant time if the value is to be inserted before p) plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      31. -
        iterator insert(const value_type & x);
        +
        iterator insert(const value_type & x);

        Effects: Inserts x and returns the iterator pointing to the newly inserted element.

        Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      32. -
        iterator insert(value_type && x);
        +
        iterator insert(value_type && x);

        Effects: Inserts a new value move-constructed from x and returns the iterator pointing to the newly inserted element.

        Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      33. -
        iterator insert(impl_value_type && x);
        +
        iterator insert(impl_value_type && x);

        Effects: Inserts a new value move-constructed from x and returns the iterator pointing to the newly inserted element.

        Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      34. -
        iterator insert(const_iterator p, const value_type & x);
        +
        iterator insert(const_iterator p, const value_type & x);

        Effects: Inserts a copy of x in the container. p is a hint pointing to where the insert should start to search.

        Returns: An iterator pointing to the element with key equivalent to the key of x.

        Complexity: Logarithmic search time (constant time if the value is to be inserted before p) plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      35. -
        iterator insert(const_iterator p, value_type && x);
        +
        iterator insert(const_iterator p, value_type && x);

        Effects: Inserts a value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

        Returns: An iterator pointing to the element with key equivalent to the key of x.

        Complexity: Logarithmic search time (constant time if the value is to be inserted before p) plus linear insertion to the elements with bigger keys than x.

        Note: If an element is inserted it might invalidate elements.

      36. -
        iterator insert(const_iterator p, impl_value_type && x);
        +
        iterator insert(const_iterator p, impl_value_type && x);

        Effects: Inserts a value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

        Returns: An iterator pointing to the element with key equivalent to the key of x.

        Complexity: Logarithmic search time (constant time if the value is to be inserted before p) plus linear insertion to the elements with bigger keys than x.

        @@ -581,7 +589,7 @@
      37. template<typename InputIterator> 
        -  void insert(InputIterator first, InputIterator last);
        + void insert(InputIterator first, InputIterator last);

        Requires: first, last are not iterators into *this.

        Effects: inserts each element from the range [first,last) .

        Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

        @@ -589,7 +597,7 @@
      38. template<typename InputIterator> 
        -  void insert(ordered_range_t, InputIterator first, InputIterator last);
        + void insert(ordered_range_t, InputIterator first, InputIterator last);

        Requires: first, last are not iterators into *this.

        Requires: [first ,last) must be ordered according to the predicate.

        Effects: inserts each element from the range [first,last) if and only if there is no element with key equivalent to the key of that element. This function is more efficient than the normal range creation for ordered ranges.

        @@ -598,13 +606,13 @@

        Note: Non-standard extension.

      39. -
        void insert(std::initializer_list< value_type > il);
        +
        void insert(std::initializer_list< value_type > il);

        Effects: inserts each element from the range [il.begin(), il.end()) .

        Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

        Note: If an element is inserted it might invalidate elements.

      40. -
        void insert(ordered_range_t, std::initializer_list< value_type > il);
        +
        void insert(ordered_range_t, std::initializer_list< value_type > il);

        Requires: [il.begin(), il.end()) must be ordered according to the predicate.

        Effects: inserts each element from the range [il.begin(), il.end()) if and only if there is no element with key equivalent to the key of that element. This function is more efficient than the normal range creation for ordered ranges.

        Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

        @@ -613,7 +621,7 @@
      41. template<typename C2> 
        -  void merge(flat_multimap< Key, T, C2, Allocator > & source);
        + void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > & source);

        Requires: this->get_allocator() == source.get_allocator().

        Effects: Extracts each element in source and insert it into a using the comparison object of *this.

        Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

        @@ -622,7 +630,7 @@
      42. template<typename C2> 
        -  void merge(flat_multimap< Key, T, C2, Allocator > && source);
        + void merge(flat_multimap< Key, T, C2, AllocatorOrContainer > && source);

        Requires: this->get_allocator() == source.get_allocator().

        Effects: Extracts each element in source and insert it into a using the comparison object of *this.

        Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

        @@ -630,7 +638,8 @@

        Complexity: N log(a.size() + N) (N has the value source.size())

      43. -
        template<typename C2> void merge(flat_map< Key, T, C2, Allocator > & source);
        +
        template<typename C2> 
        +  void merge(flat_map< Key, T, C2, AllocatorOrContainer > & source);

        Requires: this->get_allocator() == source.get_allocator().

        Effects: Extracts each element in source and insert it into a using the comparison object of *this.

        Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

        @@ -638,7 +647,8 @@

        Complexity: N log(a.size() + N) (N has the value source.size())

      44. -
        template<typename C2> void merge(flat_map< Key, T, C2, Allocator > && source);
        +
        template<typename C2> 
        +  void merge(flat_map< Key, T, C2, AllocatorOrContainer > && source);

        Requires: this->get_allocator() == source.get_allocator().

        Effects: Extracts each element in source and insert it into a using the comparison object of *this.

        Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

        @@ -646,108 +656,108 @@

        Complexity: N log(a.size() + N) (N has the value source.size())

      45. -
        iterator erase(const_iterator p);
        +
        iterator erase(const_iterator p);

        Effects: Erases the element pointed to by p.

        Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

        Complexity: Linear to the elements with keys bigger than p

        Note: Invalidates elements with keys not less than the erased element.

      46. -
        size_type erase(const key_type & x);
        +
        size_type erase(const key_type & x);

        Effects: Erases all elements in the container with key equivalent to x.

        Returns: Returns the number of erased elements.

        Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

      47. -
        iterator erase(const_iterator first, const_iterator last);
        +
        iterator erase(const_iterator first, const_iterator last);

        Effects: Erases all the elements in the range [first, last).

        Returns: Returns last.

        Complexity: size()*N where N is the distance from first to last.

        Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

      48. -
        void swap(flat_multimap & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
        +
        void swap(flat_multimap & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

        Effects: Swaps the contents of *this and x.

        Throws: Nothing.

        Complexity: Constant.

      49. -
        void clear() noexcept;
        +
        void clear() noexcept;

        Effects: erase(a.begin(),a.end()).

        Postcondition: size() == 0.

        Complexity: linear in size().

      50. -
        key_compare key_comp() const;
        +
        key_compare key_comp() const;

        Effects: Returns the comparison object out of which a was constructed.

        Complexity: Constant.

      51. -
        value_compare value_comp() const;
        +
        value_compare value_comp() const;

        Effects: Returns an object of value_compare constructed out of the comparison object.

        Complexity: Constant.

      52. -
        iterator find(const key_type & x);
        +
        iterator find(const key_type & x);

        Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

        Complexity: Logarithmic.

      53. -
        const_iterator find(const key_type & x) const;
        +
        const_iterator find(const key_type & x) const;

        Returns: An const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

        Complexity: Logarithmic.

      54. -
        size_type count(const key_type & x) const;
        +
        size_type count(const key_type & x) const;

        Returns: The number of elements with key equivalent to x.

        Complexity: log(size())+count(k)

      55. -
        iterator lower_bound(const key_type & x);
        +
        iterator lower_bound(const key_type & x);

        Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

        Complexity: Logarithmic

      56. -
        const_iterator lower_bound(const key_type & x) const;
        +
        const_iterator lower_bound(const key_type & x) const;

        Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

        Complexity: Logarithmic

      57. -
        iterator upper_bound(const key_type & x);
        +
        iterator upper_bound(const key_type & x);

        Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

        Complexity: Logarithmic

      58. -
        const_iterator upper_bound(const key_type & x) const;
        +
        const_iterator upper_bound(const key_type & x) const;

        Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

        Complexity: Logarithmic

      59. -
        std::pair< iterator, iterator > equal_range(const key_type & x);
        +
        std::pair< iterator, iterator > equal_range(const key_type & x);

        Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

        Complexity: Logarithmic

      60. std::pair< const_iterator, const_iterator > 
        -equal_range(const key_type & x) const;
        +equal_range(const key_type & x) const;

        Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

        Complexity: Logarithmic

      61. -
        sequence_type extract_sequence();
        +
        sequence_type extract_sequence();

        Effects: Extracts the internal sequence container.

        Complexity: Same as the move constructor of sequence_type, usually constant.

        Postcondition: this->empty()

        Throws: If secuence_type's move constructor throws

      62. -
        void adopt_sequence(sequence_type && seq);
        +
        void adopt_sequence(sequence_type && seq);

        Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment.

        Complexity: Assuming O(1) move assignment, O(NlogN) with N = seq.size()

        Throws: If the comparison or the move constructor throws

      63. -
        void adopt_sequence(ordered_range_t, sequence_type && seq);
        +
        void adopt_sequence(ordered_range_t, sequence_type && seq);

        Requires: seq shall be ordered according to this->compare().

        Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment.

        Complexity: Assuming O(1) move assignment, O(1)

        @@ -756,41 +766,41 @@
      -

      -flat_multimap friend functions

      +

      +flat_multimap friend functions

      1. -
        friend bool operator==(const flat_multimap & x, const flat_multimap & y);
        +
        friend bool operator==(const flat_multimap & x, const flat_multimap & y);

        Effects: Returns true if x and y are equal

        Complexity: Linear to the number of elements in the container.

      2. -
        friend bool operator!=(const flat_multimap & x, const flat_multimap & y);
        +
        friend bool operator!=(const flat_multimap & x, const flat_multimap & y);

        Effects: Returns true if x and y are unequal

        Complexity: Linear to the number of elements in the container.

      3. -
        friend bool operator<(const flat_multimap & x, const flat_multimap & y);
        +
        friend bool operator<(const flat_multimap & x, const flat_multimap & y);

        Effects: Returns true if x is less than y

        Complexity: Linear to the number of elements in the container.

      4. -
        friend bool operator>(const flat_multimap & x, const flat_multimap & y);
        +
        friend bool operator>(const flat_multimap & x, const flat_multimap & y);

        Effects: Returns true if x is greater than y

        Complexity: Linear to the number of elements in the container.

      5. -
        friend bool operator<=(const flat_multimap & x, const flat_multimap & y);
        +
        friend bool operator<=(const flat_multimap & x, const flat_multimap & y);

        Effects: Returns true if x is equal or less than y

        Complexity: Linear to the number of elements in the container.

      6. -
        friend bool operator>=(const flat_multimap & x, const flat_multimap & y);
        +
        friend bool operator>=(const flat_multimap & x, const flat_multimap & y);

        Effects: Returns true if x is equal or greater than y

        Complexity: Linear to the number of elements in the container.

      7. -
        friend void swap(flat_multimap & x, flat_multimap & y);
        +
        friend void swap(flat_multimap & x, flat_multimap & y);

        Effects: x.swap(y)

        Complexity: Constant.

      8. diff --git a/doc/html/boost/container/flat_multiset.html b/doc/html/boost/container/flat_multiset.html index 1c405b1d06..267741fa95 100644 --- a/doc/html/boost/container/flat_multiset.html +++ b/doc/html/boost/container/flat_multiset.html @@ -33,151 +33,154 @@
        // In header: <boost/container/flat_set.hpp>
         
         template<typename Key, typename Compare = std::less<Key>, 
        -         typename Allocator = new_allocator<Key> > 
        +         typename AllocatorOrContainer = new_allocator<Key> > 
         class flat_multiset {
         public:
           // types
        -  typedef Key                                                                key_type;              
        -  typedef Key                                                                value_type;            
        -  typedef Compare                                                            key_compare;           
        -  typedef Compare                                                            value_compare;         
        -  typedef ::boost::container::allocator_traits< Allocator >                  allocator_traits_type; 
        -  typedef ::boost::container::allocator_traits< Allocator >::pointer         pointer;               
        -  typedef ::boost::container::allocator_traits< Allocator >::const_pointer   const_pointer;         
        -  typedef ::boost::container::allocator_traits< Allocator >::reference       reference;             
        -  typedef ::boost::container::allocator_traits< Allocator >::const_reference const_reference;       
        -  typedef ::boost::container::allocator_traits< Allocator >::size_type       size_type;             
        -  typedef ::boost::container::allocator_traits< Allocator >::difference_type difference_type;       
        -  typedef Allocator                                                          allocator_type;        
        -  typedef implementation_defined                                             stored_allocator_type; 
        -  typedef implementation_defined                                             iterator;              
        -  typedef implementation_defined                                             const_iterator;        
        -  typedef implementation_defined                                             reverse_iterator;      
        -  typedef implementation_defined                                             const_reverse_iterator;
        -  typedef implementation_defined                                             sequence_type;         
        +  typedef Key                                                    key_type;              
        +  typedef Compare                                                key_compare;           
        +  typedef Key                                                    value_type;            
        +  typedef implementation_defined                                 sequence_type;         
        +  typedef sequence_type::allocator_type                          allocator_type;        
        +  typedef ::boost::container::allocator_traits< allocator_type > allocator_traits_type; 
        +  typedef sequence_type::pointer                                 pointer;               
        +  typedef sequence_type::const_pointer                           const_pointer;         
        +  typedef sequence_type::reference                               reference;             
        +  typedef sequence_type::const_reference                         const_reference;       
        +  typedef sequence_type::size_type                               size_type;             
        +  typedef sequence_type::difference_type                         difference_type;       
        +  typedef implementation_defined                                 stored_allocator_type; 
        +  typedef implementation_defined                                 value_compare;         
        +  typedef sequence_type::iterator                                iterator;              
        +  typedef sequence_type::const_iterator                          const_iterator;        
        +  typedef sequence_type::reverse_iterator                        reverse_iterator;      
        +  typedef sequence_type::const_reverse_iterator                  const_reverse_iterator;
         
           // construct/copy/destruct
        -  explicit flat_multiset() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
        -  explicit flat_multiset(const Compare &);
        -  explicit flat_multiset(const allocator_type &);
        -  flat_multiset(const Compare &, const allocator_type &);
        -  template<typename InputIterator> flat_multiset(InputIterator, InputIterator);
        +  flat_multiset() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
        +  explicit flat_multiset(const Compare &);
        +  explicit flat_multiset(const allocator_type &);
        +  flat_multiset(const Compare &, const allocator_type &);
        +  template<typename InputIterator> flat_multiset(InputIterator, InputIterator);
           template<typename InputIterator> 
        -    flat_multiset(InputIterator, InputIterator, const allocator_type &);
        +    flat_multiset(InputIterator, InputIterator, const allocator_type &);
           template<typename InputIterator> 
        -    flat_multiset(InputIterator, InputIterator, const Compare &);
        +    flat_multiset(InputIterator, InputIterator, const Compare &);
           template<typename InputIterator> 
        -    flat_multiset(InputIterator, InputIterator, const Compare &, 
        +    flat_multiset(InputIterator, InputIterator, const Compare &, 
                           const allocator_type &);
           template<typename InputIterator> 
        -    flat_multiset(ordered_range_t, InputIterator, InputIterator);
        +    flat_multiset(ordered_range_t, InputIterator, InputIterator);
           template<typename InputIterator> 
        -    flat_multiset(ordered_range_t, InputIterator, InputIterator, 
        +    flat_multiset(ordered_range_t, InputIterator, InputIterator, 
                           const Compare &);
           template<typename InputIterator> 
        -    flat_multiset(ordered_range_t, InputIterator, InputIterator, 
        +    flat_multiset(ordered_range_t, InputIterator, InputIterator, 
                           const Compare &, const allocator_type &);
        -  flat_multiset(std::initializer_list< value_type >);
        -  flat_multiset(std::initializer_list< value_type >, const allocator_type &);
        -  flat_multiset(std::initializer_list< value_type >, const Compare &);
        -  flat_multiset(std::initializer_list< value_type >, const Compare &, 
        +  flat_multiset(std::initializer_list< value_type >);
        +  flat_multiset(std::initializer_list< value_type >, const allocator_type &);
        +  flat_multiset(std::initializer_list< value_type >, const Compare &);
        +  flat_multiset(std::initializer_list< value_type >, const Compare &, 
                         const allocator_type &);
        -  flat_multiset(ordered_range_t, std::initializer_list< value_type >);
        -  flat_multiset(ordered_range_t, std::initializer_list< value_type >, 
        +  flat_multiset(ordered_range_t, std::initializer_list< value_type >);
        +  flat_multiset(ordered_range_t, std::initializer_list< value_type >, 
                         const Compare &);
        -  flat_multiset(ordered_range_t, std::initializer_list< value_type >, 
        +  flat_multiset(ordered_range_t, std::initializer_list< value_type >, 
                         const Compare &, const allocator_type &);
        -  flat_multiset(const flat_multiset &);
        -  flat_multiset(flat_multiset &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
        -  flat_multiset(const flat_multiset &, const allocator_type &);
        -  flat_multiset(flat_multiset &&, const allocator_type &);
        -  flat_multiset & operator=(const flat_multiset &);
        +  flat_multiset(const flat_multiset &);
        +  flat_multiset(flat_multiset &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
        +  flat_multiset(const flat_multiset &, const allocator_type &);
        +  flat_multiset(flat_multiset &&, const allocator_type &);
        +  flat_multiset & operator=(const flat_multiset &);
           flat_multiset & 
        -  operator=(flat_multiset &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
        -  flat_multiset & operator=(std::initializer_list< value_type >);
        +  operator=(flat_multiset &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
        +  flat_multiset & operator=(std::initializer_list< value_type >);
         
        -  // public member functions
        -  allocator_type get_allocator() const noexcept;
        -  stored_allocator_type & get_stored_allocator() noexcept;
        -  const stored_allocator_type & get_stored_allocator() const noexcept;
        -  iterator begin() noexcept;
        -  const_iterator begin() const;
        -  const_iterator cbegin() const noexcept;
        -  iterator end() noexcept;
        -  const_iterator end() const noexcept;
        -  const_iterator cend() const noexcept;
        -  reverse_iterator rbegin() noexcept;
        -  const_reverse_iterator rbegin() const noexcept;
        -  const_reverse_iterator crbegin() const noexcept;
        -  reverse_iterator rend() noexcept;
        -  const_reverse_iterator rend() const noexcept;
        -  const_reverse_iterator crend() const noexcept;
        -  bool empty() const noexcept;
        -  size_type size() const noexcept;
        -  size_type max_size() const noexcept;
        -  size_type capacity() const noexcept;
        -  void reserve(size_type);
        -  void shrink_to_fit();
        -  template<class... Args> iterator emplace(Args &&...);
        -  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
        -  iterator insert(const value_type &);
        -  iterator insert(value_type &&);
        -  iterator insert(const_iterator, const value_type &);
        -  iterator insert(const_iterator, value_type &&);
        -  template<typename InputIterator> void insert(InputIterator, InputIterator);
        +  // public member functions
        +  allocator_type get_allocator() const noexcept;
        +  stored_allocator_type & get_stored_allocator() noexcept;
        +  const stored_allocator_type & get_stored_allocator() const noexcept;
        +  iterator begin() noexcept;
        +  const_iterator begin() const;
        +  const_iterator cbegin() const noexcept;
        +  iterator end() noexcept;
        +  const_iterator end() const noexcept;
        +  const_iterator cend() const noexcept;
        +  reverse_iterator rbegin() noexcept;
        +  const_reverse_iterator rbegin() const noexcept;
        +  const_reverse_iterator crbegin() const noexcept;
        +  reverse_iterator rend() noexcept;
        +  const_reverse_iterator rend() const noexcept;
        +  const_reverse_iterator crend() const noexcept;
        +  bool empty() const noexcept;
        +  size_type size() const noexcept;
        +  size_type max_size() const noexcept;
        +  size_type capacity() const noexcept;
        +  void reserve(size_type);
        +  void shrink_to_fit();
        +  template<class... Args> iterator emplace(Args &&...);
        +  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
        +  iterator insert(const value_type &);
        +  iterator insert(value_type &&);
        +  iterator insert(const_iterator, const value_type &);
        +  iterator insert(const_iterator, value_type &&);
        +  template<typename InputIterator> void insert(InputIterator, InputIterator);
           template<typename InputIterator> 
        -    void insert(ordered_range_t, InputIterator, InputIterator);
        -  void insert(std::initializer_list< value_type >);
        -  void insert(ordered_range_t, std::initializer_list< value_type >);
        -  template<typename C2> void merge(flat_multiset< Key, C2, Allocator > &);
        -  template<typename C2> void merge(flat_multiset< Key, C2, Allocator > &&);
        -  template<typename C2> void merge(flat_set< Key, C2, Allocator > &);
        -  template<typename C2> void merge(flat_set< Key, C2, Allocator > &&);
        -  iterator erase(const_iterator);
        -  size_type erase(const key_type &);
        -  iterator erase(const_iterator, const_iterator);
        -  void swap(flat_multiset &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
        -  void clear() noexcept;
        -  key_compare key_comp() const;
        -  value_compare value_comp() const;
        -  iterator find(const key_type &);
        -  const_iterator find(const key_type &) const;
        -  iterator nth(size_type) noexcept;
        -  const_iterator nth(size_type) const noexcept;
        -  size_type index_of(iterator) noexcept;
        -  size_type index_of(const_iterator) const noexcept;
        -  size_type count(const key_type &) const;
        -  iterator lower_bound(const key_type &);
        -  const_iterator lower_bound(const key_type &) const;
        -  iterator upper_bound(const key_type &);
        -  const_iterator upper_bound(const key_type &) const;
        +    void insert(ordered_range_t, InputIterator, InputIterator);
        +  void insert(std::initializer_list< value_type >);
        +  void insert(ordered_range_t, std::initializer_list< value_type >);
        +  template<typename C2> 
        +    void merge(flat_multiset< Key, C2, AllocatorOrContainer > &);
        +  template<typename C2> 
        +    void merge(flat_multiset< Key, C2, AllocatorOrContainer > &&);
        +  template<typename C2> 
        +    void merge(flat_set< Key, C2, AllocatorOrContainer > &);
        +  template<typename C2> 
        +    void merge(flat_set< Key, C2, AllocatorOrContainer > &&);
        +  iterator erase(const_iterator);
        +  size_type erase(const key_type &);
        +  iterator erase(const_iterator, const_iterator);
        +  void swap(flat_multiset &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
        +  void clear() noexcept;
        +  key_compare key_comp() const;
        +  value_compare value_comp() const;
        +  iterator find(const key_type &);
        +  const_iterator find(const key_type &) const;
        +  iterator nth(size_type) noexcept;
        +  const_iterator nth(size_type) const noexcept;
        +  size_type index_of(iterator) noexcept;
        +  size_type index_of(const_iterator) const noexcept;
        +  size_type count(const key_type &) const;
        +  iterator lower_bound(const key_type &);
        +  const_iterator lower_bound(const key_type &) const;
        +  iterator upper_bound(const key_type &);
        +  const_iterator upper_bound(const key_type &) const;
           std::pair< const_iterator, const_iterator > 
        -  equal_range(const key_type &) const;
        -  std::pair< iterator, iterator > equal_range(const key_type &);
        -  sequence_type extract_sequence();
        -  void adopt_sequence(sequence_type &&);
        -  void adopt_sequence(ordered_range_t, sequence_type &&);
        +  equal_range(const key_type &) const;
        +  std::pair< iterator, iterator > equal_range(const key_type &);
        +  sequence_type extract_sequence();
        +  void adopt_sequence(sequence_type &&);
        +  void adopt_sequence(ordered_range_t, sequence_type &&);
         
        -  // friend functions
        -  friend bool operator==(const flat_multiset &, const flat_multiset &);
        -  friend bool operator!=(const flat_multiset &, const flat_multiset &);
        -  friend bool operator<(const flat_multiset &, const flat_multiset &);
        -  friend bool operator>(const flat_multiset &, const flat_multiset &);
        -  friend bool operator<=(const flat_multiset &, const flat_multiset &);
        -  friend bool operator>=(const flat_multiset &, const flat_multiset &);
        -  friend void swap(flat_multiset &, flat_multiset &);
        +  // friend functions
        +  friend bool operator==(const flat_multiset &, const flat_multiset &);
        +  friend bool operator!=(const flat_multiset &, const flat_multiset &);
        +  friend bool operator<(const flat_multiset &, const flat_multiset &);
        +  friend bool operator>(const flat_multiset &, const flat_multiset &);
        +  friend bool operator<=(const flat_multiset &, const flat_multiset &);
        +  friend bool operator>=(const flat_multiset &, const flat_multiset &);
        +  friend void swap(flat_multiset &, flat_multiset &);
         };
        -

        Description

        -

        flat_multiset is a Sorted Associative Container that stores objects of type Key.

        -

        flat_multiset can store multiple copies of the same key value.

        -

        flat_multiset is similar to std::multiset but it's implemented like an ordered vector. This means that inserting a new element into a flat_multiset invalidates previous iterators and references

        -

        Erasing an element invalidates iterators and references pointing to elements that come after (their keys are bigger) the erased element.

        +

        Description

        +

        flat_multiset is a Sorted Associative Container that stores objects of type Key and can store multiple copies of the same key value.

        +

        flat_multiset is similar to std::multiset but it's implemented by as an ordered sequence container. The underlying sequence container is by default vector but it can also work user-provided vector-like SequenceContainers (like static_vector or small_vector).

        +

        Using vector-like sequence containers means that inserting a new element into a flat_multiset might invalidate previous iterators and references (unless that sequence container is stable_vector or a similar container that offers stable pointers and references). Similarly, erasing an element might invalidate iterators and references pointing to elements that come after (their keys are bigger) the erased element.

        This container provides random-access iterators.

        -

        Template Parameters

        +

        Template Parameters

        1. typename Key
          @@ -188,66 +191,72 @@

          is the comparison functor used to order keys

        2. -
          typename Allocator = new_allocator<Key>
          -

          is the allocator to be used to allocate memory for this container

          +
          typename AllocatorOrContainer = new_allocator<Key>
          +

          is either:

          +
            +
          • The allocator to allocate value_types (e.g. allocator< std::pair<Key, T> > ). (in this case sequence_type will be vector<value_type, AllocatorOrContainer>)

          • +
          • The SequenceContainer to be used as the underlying sequence_type. It must be a vector-like sequence container with random-access iterators.

          • +
          +

          +

        -

        +

        flat_multiset public construct/copy/destruct

        1. -
          explicit flat_multiset() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
          +
          flat_multiset() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

          Effects: Default constructs an empty container.

          Complexity: Constant.

        2. -
          explicit flat_multiset(const Compare & comp);
          +
          explicit flat_multiset(const Compare & comp);

          Effects: Constructs an empty container using the specified comparison object.

          Complexity: Constant.

        3. -
          explicit flat_multiset(const allocator_type & a);
          +
          explicit flat_multiset(const allocator_type & a);

          Effects: Constructs an empty container using the specified allocator.

          Complexity: Constant.

        4. -
          flat_multiset(const Compare & comp, const allocator_type & a);
          +
          flat_multiset(const Compare & comp, const allocator_type & a);

          Effects: Constructs an empty container using the specified comparison object and allocator.

          Complexity: Constant.

        5. template<typename InputIterator> 
          -  flat_multiset(InputIterator first, InputIterator last);
          + flat_multiset(InputIterator first, InputIterator last);

          Effects: Constructs an empty container and inserts elements from the range [first ,last ).

          Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

        6. template<typename InputIterator> 
          -  flat_multiset(InputIterator first, InputIterator last, 
          +  flat_multiset(InputIterator first, InputIterator last, 
                           const allocator_type & a);

          Effects: Constructs an empty container using the specified allocator, and inserts elements from the range [first ,last ).

          Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

        7. template<typename InputIterator> 
          -  flat_multiset(InputIterator first, InputIterator last, const Compare & comp);
          + flat_multiset(InputIterator first, InputIterator last, const Compare & comp);

          Effects: Constructs an empty container using the specified comparison object and inserts elements from the range [first ,last ).

          Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

        8. template<typename InputIterator> 
          -  flat_multiset(InputIterator first, InputIterator last, const Compare & comp, 
          +  flat_multiset(InputIterator first, InputIterator last, const Compare & comp, 
                           const allocator_type & a);

          Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

          Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

        9. template<typename InputIterator> 
          -  flat_multiset(ordered_range_t, InputIterator first, InputIterator last);
          + flat_multiset(ordered_range_t, InputIterator first, InputIterator last);

          Effects: Constructs an empty flat_multiset and inserts elements from the ordered range [first ,last ). This function is more efficient than the normal range creation for ordered ranges.

          Requires: [first ,last) must be ordered according to the predicate.

          Complexity: Linear in N.

          @@ -255,7 +264,7 @@
        10. template<typename InputIterator> 
          -  flat_multiset(ordered_range_t, InputIterator first, InputIterator last, 
          +  flat_multiset(ordered_range_t, InputIterator first, InputIterator last, 
                           const Compare & comp);

          Effects: Constructs an empty flat_multiset using the specified comparison object and inserts elements from the ordered range [first ,last ). This function is more efficient than the normal range creation for ordered ranges.

          Requires: [first ,last) must be ordered according to the predicate.

          @@ -264,7 +273,7 @@
        11. template<typename InputIterator> 
          -  flat_multiset(ordered_range_t, InputIterator first, InputIterator last, 
          +  flat_multiset(ordered_range_t, InputIterator first, InputIterator last, 
                           const Compare & comp, const allocator_type & a);

          Effects: Constructs an empty flat_multiset using the specified comparison object and allocator, and inserts elements from the ordered range [first, last ). This function is more efficient than the normal range creation for ordered ranges.

          Requires: [first ,last) must be ordered according to the predicate.

          @@ -272,36 +281,36 @@

          Note: Non-standard extension.

        12. -
          flat_multiset(std::initializer_list< value_type > il);
          +
          flat_multiset(std::initializer_list< value_type > il);

          Effects: Default constructs an empty container.

          Complexity: Constant.

        13. -
          flat_multiset(std::initializer_list< value_type > il, 
          +
          flat_multiset(std::initializer_list< value_type > il, 
                         const allocator_type & a);

          Effects: Constructs an empty container using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

          Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

        14. -
          flat_multiset(std::initializer_list< value_type > il, const Compare & comp);
          +
          flat_multiset(std::initializer_list< value_type > il, const Compare & comp);

          Effects: Constructs an empty container using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

          Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

        15. -
          flat_multiset(std::initializer_list< value_type > il, const Compare & comp, 
          +
          flat_multiset(std::initializer_list< value_type > il, const Compare & comp, 
                         const allocator_type & a);

          Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

          Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

        16. -
          flat_multiset(ordered_range_t, std::initializer_list< value_type > il);
          +
          flat_multiset(ordered_range_t, std::initializer_list< value_type > il);

          Effects: Constructs an empty containerand inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

          Requires: [il.begin(), il.end()) must be ordered according to the predicate.

          Complexity: Linear in N.

          Note: Non-standard extension.

        17. -
          flat_multiset(ordered_range_t, std::initializer_list< value_type > il, 
          +
          flat_multiset(ordered_range_t, std::initializer_list< value_type > il, 
                         const Compare & comp);

          Effects: Constructs an empty container using the specified comparison object and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

          Requires: [il.begin(), il.end()) must be ordered according to the predicate.

          @@ -309,7 +318,7 @@

          Note: Non-standard extension.

        18. -
          flat_multiset(ordered_range_t, std::initializer_list< value_type > il, 
          +
          flat_multiset(ordered_range_t, std::initializer_list< value_type > il, 
                         const Compare & comp, const allocator_type & a);

          Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

          Requires: [il.begin(), il.end()) must be ordered according to the predicate.

          @@ -317,209 +326,209 @@

          Note: Non-standard extension.

        19. -
          flat_multiset(const flat_multiset & x);
          +
          flat_multiset(const flat_multiset & x);

          Effects: Copy constructs the container.

          Complexity: Linear in x.size().

        20. -
          flat_multiset(flat_multiset && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
          +
          flat_multiset(flat_multiset && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

          Effects: Move constructs thecontainer. Constructs *this using x's resources.

          Complexity: Constant.

          Postcondition: x is emptied.

        21. -
          flat_multiset(const flat_multiset & x, const allocator_type & a);
          +
          flat_multiset(const flat_multiset & x, const allocator_type & a);

          Effects: Copy constructs a container using the specified allocator.

          Complexity: Linear in x.size().

        22. -
          flat_multiset(flat_multiset && x, const allocator_type & a);
          +
          flat_multiset(flat_multiset && x, const allocator_type & a);

          Effects: Move constructs a container using the specified allocator. Constructs *this using x's resources.

          Complexity: Constant if a == x.get_allocator(), linear otherwise

        23. -
          flat_multiset & operator=(const flat_multiset & x);
          +
          flat_multiset & operator=(const flat_multiset & x);

          Effects: Makes *this a copy of x.

          Complexity: Linear in x.size().

        24. flat_multiset & 
          -operator=(flat_multiset && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
          +operator=(flat_multiset && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

          Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

          Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

        25. -
          flat_multiset & operator=(std::initializer_list< value_type > il);
          +
          flat_multiset & operator=(std::initializer_list< value_type > il);

          Effects: Copy all elements from il to *this.

          Complexity: Linear in il.size().

        -

        -flat_multiset public member functions

        +

        +flat_multiset public member functions

        1. -
          allocator_type get_allocator() const noexcept;
          +
          allocator_type get_allocator() const noexcept;

          Effects: Returns a copy of the allocator that was passed to the object's constructor.

          Complexity: Constant.

        2. -
          stored_allocator_type & get_stored_allocator() noexcept;
          +
          stored_allocator_type & get_stored_allocator() noexcept;

          Effects: Returns a reference to the internal allocator.

          Throws: Nothing

          Complexity: Constant.

          Note: Non-standard extension.

        3. -
          const stored_allocator_type & get_stored_allocator() const noexcept;
          +
          const stored_allocator_type & get_stored_allocator() const noexcept;

          Effects: Returns a reference to the internal allocator.

          Throws: Nothing

          Complexity: Constant.

          Note: Non-standard extension.

        4. -
          iterator begin() noexcept;
          +
          iterator begin() noexcept;

          Effects: Returns an iterator to the first element contained in the container.

          Throws: Nothing.

          Complexity: Constant.

        5. -
          const_iterator begin() const;
          +
          const_iterator begin() const;

          Effects: Returns a const_iterator to the first element contained in the container.

          Throws: Nothing.

          Complexity: Constant.

        6. -
          const_iterator cbegin() const noexcept;
          +
          const_iterator cbegin() const noexcept;

          Effects: Returns a const_iterator to the first element contained in the container.

          Throws: Nothing.

          Complexity: Constant.

        7. -
          iterator end() noexcept;
          +
          iterator end() noexcept;

          Effects: Returns an iterator to the end of the container.

          Throws: Nothing.

          Complexity: Constant.

        8. -
          const_iterator end() const noexcept;
          +
          const_iterator end() const noexcept;

          Effects: Returns a const_iterator to the end of the container.

          Throws: Nothing.

          Complexity: Constant.

        9. -
          const_iterator cend() const noexcept;
          +
          const_iterator cend() const noexcept;

          Effects: Returns a const_iterator to the end of the container.

          Throws: Nothing.

          Complexity: Constant.

        10. -
          reverse_iterator rbegin() noexcept;
          +
          reverse_iterator rbegin() noexcept;

          Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

          Throws: Nothing.

          Complexity: Constant.

        11. -
          const_reverse_iterator rbegin() const noexcept;
          +
          const_reverse_iterator rbegin() const noexcept;

          Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

          Throws: Nothing.

          Complexity: Constant.

        12. -
          const_reverse_iterator crbegin() const noexcept;
          +
          const_reverse_iterator crbegin() const noexcept;

          Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

          Throws: Nothing.

          Complexity: Constant.

        13. -
          reverse_iterator rend() noexcept;
          +
          reverse_iterator rend() noexcept;

          Effects: Returns a reverse_iterator pointing to the end of the reversed container.

          Throws: Nothing.

          Complexity: Constant.

        14. -
          const_reverse_iterator rend() const noexcept;
          +
          const_reverse_iterator rend() const noexcept;

          Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

          Throws: Nothing.

          Complexity: Constant.

        15. -
          const_reverse_iterator crend() const noexcept;
          +
          const_reverse_iterator crend() const noexcept;

          Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

          Throws: Nothing.

          Complexity: Constant.

        16. -
          bool empty() const noexcept;
          +
          bool empty() const noexcept;

          Effects: Returns true if the container contains no elements.

          Throws: Nothing.

          Complexity: Constant.

        17. -
          size_type size() const noexcept;
          +
          size_type size() const noexcept;

          Effects: Returns the number of the elements contained in the container.

          Throws: Nothing.

          Complexity: Constant.

        18. -
          size_type max_size() const noexcept;
          +
          size_type max_size() const noexcept;

          Effects: Returns the largest possible size of the container.

          Throws: Nothing.

          Complexity: Constant.

        19. -
          size_type capacity() const noexcept;
          +
          size_type capacity() const noexcept;

          Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

          Throws: Nothing.

          Complexity: Constant.

        20. -
          void reserve(size_type cnt);
          -

          Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

          -

          Throws: If memory allocation allocation throws or Key's copy constructor throws.

          +
          void reserve(size_type cnt);
          +

          Effects: If n is less than or equal to capacity(), or the underlying container has no reserve member, this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

          +

          Throws: If memory allocation allocation throws or T's copy constructor throws.

          Note: If capacity() is less than "cnt", iterators and references to to values might be invalidated.

        21. -
          void shrink_to_fit();
          +
          void shrink_to_fit();
          Effects: Tries to deallocate the excess of memory created

          Throws: If memory allocation throws, or Key's copy constructor throws.

          Complexity: Linear to size().

        22. -
          template<class... Args> iterator emplace(Args &&... args);
          +
          template<class... Args> iterator emplace(Args &&... args);

          Effects: Inserts an object of type Key constructed with std::forward<Args>(args)... and returns the iterator pointing to the newly inserted element.

          Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

          Note: If an element is inserted it might invalidate elements.

        23. template<class... Args> 
          -  iterator emplace_hint(const_iterator p, Args &&... args);
          + iterator emplace_hint(const_iterator p, Args &&... args);

          Effects: Inserts an object of type Key constructed with std::forward<Args>(args)... in the container. p is a hint pointing to where the insert should start to search.

          Returns: An iterator pointing to the element with key equivalent to the key of x.

          Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

          Note: If an element is inserted it might invalidate elements.

        24. -
          iterator insert(const value_type & x);
          +
          iterator insert(const value_type & x);

          Effects: Inserts x and returns the iterator pointing to the newly inserted element.

          Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

          Note: If an element is inserted it might invalidate elements.

        25. -
          iterator insert(value_type && x);
          +
          iterator insert(value_type && x);

          Effects: Inserts a new value_type move constructed from x and returns the iterator pointing to the newly inserted element.

          Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

          Note: If an element is inserted it might invalidate elements.

        26. -
          iterator insert(const_iterator p, const value_type & x);
          +
          iterator insert(const_iterator p, const value_type & x);

          Effects: Inserts a copy of x in the container. p is a hint pointing to where the insert should start to search.

          Returns: An iterator pointing to the element with key equivalent to the key of x.

          Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

          Note: If an element is inserted it might invalidate elements.

        27. -
          iterator insert(const_iterator p, value_type && x);
          +
          iterator insert(const_iterator p, value_type && x);

          Effects: Inserts a new value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

          Returns: An iterator pointing to the element with key equivalent to the key of x.

          Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

          @@ -527,7 +536,7 @@
        28. template<typename InputIterator> 
          -  void insert(InputIterator first, InputIterator last);
          + void insert(InputIterator first, InputIterator last);

          Requires: first, last are not iterators into *this.

          Effects: inserts each element from the range [first,last) .

          Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

          @@ -535,27 +544,28 @@
        29. template<typename InputIterator> 
          -  void insert(ordered_range_t, InputIterator first, InputIterator last);
          + void insert(ordered_range_t, InputIterator first, InputIterator last);

          Requires: first, last are not iterators into *this and must be ordered according to the predicate.

          Effects: inserts each element from the range [first,last) .This function is more efficient than the normal range creation for ordered ranges.

          Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

          Note: Non-standard extension. If an element is inserted it might invalidate elements.

        30. -
          void insert(std::initializer_list< value_type > il);
          +
          void insert(std::initializer_list< value_type > il);

          Effects: inserts each element from the range [il.begin(), il.end()).

          Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

          Note: If an element is inserted it might invalidate elements.

        31. -
          void insert(ordered_range_t, std::initializer_list< value_type > il);
          +
          void insert(ordered_range_t, std::initializer_list< value_type > il);

          Requires: Range [il.begin(), il.end()) must be ordered according to the predicate.

          Effects: inserts each element from the range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

          Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end()) search time plus N*size() insertion time.

          Note: Non-standard extension. If an element is inserted it might invalidate elements.

        32. -
          template<typename C2> void merge(flat_multiset< Key, C2, Allocator > & source);
          +
          template<typename C2> 
          +  void merge(flat_multiset< Key, C2, AllocatorOrContainer > & source);

          Requires: this->get_allocator() == source.get_allocator().

          Effects: Extracts each element in source and insert it into a using the comparison object of *this.

          Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

          @@ -564,7 +574,7 @@
        33. template<typename C2> 
          -  void merge(flat_multiset< Key, C2, Allocator > && source);
          + void merge(flat_multiset< Key, C2, AllocatorOrContainer > && source);

          Requires: this->get_allocator() == source.get_allocator().

          Effects: Extracts each element in source and insert it into a using the comparison object of *this.

          Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

          @@ -572,7 +582,8 @@

          Complexity: N log(a.size() + N) (N has the value source.size())

        34. -
          template<typename C2> void merge(flat_set< Key, C2, Allocator > & source);
          +
          template<typename C2> 
          +  void merge(flat_set< Key, C2, AllocatorOrContainer > & source);

          Requires: this->get_allocator() == source.get_allocator().

          Effects: Extracts each element in source and insert it into a using the comparison object of *this.

          Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

          @@ -580,7 +591,8 @@

          Complexity: N log(a.size() + N) (N has the value source.size())

        35. -
          template<typename C2> void merge(flat_set< Key, C2, Allocator > && source);
          +
          template<typename C2> 
          +  void merge(flat_set< Key, C2, AllocatorOrContainer > && source);

          Requires: this->get_allocator() == source.get_allocator().

          Effects: Extracts each element in source and insert it into a using the comparison object of *this.

          Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

          @@ -588,59 +600,59 @@

          Complexity: N log(a.size() + N) (N has the value source.size())

        36. -
          iterator erase(const_iterator p);
          +
          iterator erase(const_iterator p);

          Effects: Erases the element pointed to by p.

          Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

          Complexity: Linear to the elements with keys bigger than p

          Note: Invalidates elements with keys not less than the erased element.

        37. -
          size_type erase(const key_type & x);
          +
          size_type erase(const key_type & x);

          Effects: Erases all elements in the container with key equivalent to x.

          Returns: Returns the number of erased elements.

          Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

        38. -
          iterator erase(const_iterator first, const_iterator last);
          +
          iterator erase(const_iterator first, const_iterator last);

          Effects: Erases all the elements in the range [first, last).

          Returns: Returns last.

          Complexity: size()*N where N is the distance from first to last.

          Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

        39. -
          void swap(flat_multiset & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
          +
          void swap(flat_multiset & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

          Effects: Swaps the contents of *this and x.

          Throws: Nothing.

          Complexity: Constant.

        40. -
          void clear() noexcept;
          +
          void clear() noexcept;

          Effects: erase(a.begin(),a.end()).

          Postcondition: size() == 0.

          Complexity: linear in size().

        41. -
          key_compare key_comp() const;
          +
          key_compare key_comp() const;

          Effects: Returns the comparison object out of which a was constructed.

          Complexity: Constant.

        42. -
          value_compare value_comp() const;
          +
          value_compare value_comp() const;

          Effects: Returns an object of value_compare constructed out of the comparison object.

          Complexity: Constant.

        43. -
          iterator find(const key_type & x);
          +
          iterator find(const key_type & x);

          Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

          Complexity: Logarithmic.

        44. -
          const_iterator find(const key_type & x) const;
          +
          const_iterator find(const key_type & x) const;

          Returns: A const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

          Complexity: Logarithmic.

        45. -
          iterator nth(size_type n) noexcept;
          +
          iterator nth(size_type n) noexcept;

          Requires: size() >= n.

          Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

          Throws: Nothing.

          @@ -648,7 +660,7 @@

          Note: Non-standard extension

        46. -
          const_iterator nth(size_type n) const noexcept;
          +
          const_iterator nth(size_type n) const noexcept;

          Requires: size() >= n.

          Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

          Throws: Nothing.

          @@ -656,7 +668,7 @@

          Note: Non-standard extension

        47. -
          size_type index_of(iterator p) noexcept;
          +
          size_type index_of(iterator p) noexcept;

          Requires: begin() <= p <= end().

          Effects: Returns the index of the element pointed by p and size() if p == end().

          Throws: Nothing.

          @@ -664,7 +676,7 @@

          Note: Non-standard extension

        48. -
          size_type index_of(const_iterator p) const noexcept;
          +
          size_type index_of(const_iterator p) const noexcept;

          Requires: begin() <= p <= end().

          Effects: Returns the index of the element pointed by p and size() if p == end().

          Throws: Nothing.

          @@ -672,56 +684,56 @@

          Note: Non-standard extension

        49. -
          size_type count(const key_type & x) const;
          +
          size_type count(const key_type & x) const;

          Returns: The number of elements with key equivalent to x.

          Complexity: log(size())+count(k)

        50. -
          iterator lower_bound(const key_type & x);
          +
          iterator lower_bound(const key_type & x);

          Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

          Complexity: Logarithmic

        51. -
          const_iterator lower_bound(const key_type & x) const;
          +
          const_iterator lower_bound(const key_type & x) const;

          Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

          Complexity: Logarithmic

        52. -
          iterator upper_bound(const key_type & x);
          +
          iterator upper_bound(const key_type & x);

          Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

          Complexity: Logarithmic

        53. -
          const_iterator upper_bound(const key_type & x) const;
          +
          const_iterator upper_bound(const key_type & x) const;

          Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

          Complexity: Logarithmic

        54. std::pair< const_iterator, const_iterator > 
          -equal_range(const key_type & x) const;
          +equal_range(const key_type & x) const;

          Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

          Complexity: Logarithmic

        55. -
          std::pair< iterator, iterator > equal_range(const key_type & x);
          +
          std::pair< iterator, iterator > equal_range(const key_type & x);

          Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

          Complexity: Logarithmic

        56. -
          sequence_type extract_sequence();
          +
          sequence_type extract_sequence();

          Effects: Extracts the internal sequence container.

          Complexity: Same as the move constructor of sequence_type, usually constant.

          Postcondition: this->empty()

          Throws: If secuence_type's move constructor throws

        57. -
          void adopt_sequence(sequence_type && seq);
          +
          void adopt_sequence(sequence_type && seq);

          Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment.

          Complexity: Assuming O(1) move assignment, O(NlogN) with N = seq.size()

          Throws: If the comparison or the move constructor throws

        58. -
          void adopt_sequence(ordered_range_t, sequence_type && seq);
          +
          void adopt_sequence(ordered_range_t, sequence_type && seq);

          Requires: seq shall be ordered according to this->compare()

          Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment.

          Complexity: Assuming O(1) move assignment, O(1)

          @@ -730,41 +742,41 @@
        -

        -flat_multiset friend functions

        +

        +flat_multiset friend functions

        1. -
          friend bool operator==(const flat_multiset & x, const flat_multiset & y);
          +
          friend bool operator==(const flat_multiset & x, const flat_multiset & y);

          Effects: Returns true if x and y are equal

          Complexity: Linear to the number of elements in the container.

        2. -
          friend bool operator!=(const flat_multiset & x, const flat_multiset & y);
          +
          friend bool operator!=(const flat_multiset & x, const flat_multiset & y);

          Effects: Returns true if x and y are unequal

          Complexity: Linear to the number of elements in the container.

        3. -
          friend bool operator<(const flat_multiset & x, const flat_multiset & y);
          +
          friend bool operator<(const flat_multiset & x, const flat_multiset & y);

          Effects: Returns true if x is less than y

          Complexity: Linear to the number of elements in the container.

        4. -
          friend bool operator>(const flat_multiset & x, const flat_multiset & y);
          +
          friend bool operator>(const flat_multiset & x, const flat_multiset & y);

          Effects: Returns true if x is greater than y

          Complexity: Linear to the number of elements in the container.

        5. -
          friend bool operator<=(const flat_multiset & x, const flat_multiset & y);
          +
          friend bool operator<=(const flat_multiset & x, const flat_multiset & y);

          Effects: Returns true if x is equal or less than y

          Complexity: Linear to the number of elements in the container.

        6. -
          friend bool operator>=(const flat_multiset & x, const flat_multiset & y);
          +
          friend bool operator>=(const flat_multiset & x, const flat_multiset & y);

          Effects: Returns true if x is equal or greater than y

          Complexity: Linear to the number of elements in the container.

        7. -
          friend void swap(flat_multiset & x, flat_multiset & y);
          +
          friend void swap(flat_multiset & x, flat_multiset & y);

          Effects: x.swap(y)

          Complexity: Constant.

        8. diff --git a/doc/html/boost/container/flat_set.html b/doc/html/boost/container/flat_set.html index cfdb86058d..13979ba303 100644 --- a/doc/html/boost/container/flat_set.html +++ b/doc/html/boost/container/flat_set.html @@ -33,149 +33,153 @@
          // In header: <boost/container/flat_set.hpp>
           
           template<typename Key, typename Compare = std::less<Key>, 
          -         typename Allocator = new_allocator<Key> > 
          +         typename AllocatorOrContainer = new_allocator<Key> > 
           class flat_set {
           public:
             // types
          -  typedef Key                                                                key_type;              
          -  typedef Key                                                                value_type;            
          -  typedef Compare                                                            key_compare;           
          -  typedef Compare                                                            value_compare;         
          -  typedef ::boost::container::allocator_traits< Allocator >                  allocator_traits_type; 
          -  typedef ::boost::container::allocator_traits< Allocator >::pointer         pointer;               
          -  typedef ::boost::container::allocator_traits< Allocator >::const_pointer   const_pointer;         
          -  typedef ::boost::container::allocator_traits< Allocator >::reference       reference;             
          -  typedef ::boost::container::allocator_traits< Allocator >::const_reference const_reference;       
          -  typedef ::boost::container::allocator_traits< Allocator >::size_type       size_type;             
          -  typedef ::boost::container::allocator_traits< Allocator >::difference_type difference_type;       
          -  typedef Allocator                                                          allocator_type;        
          -  typedef implementation_defined                                             stored_allocator_type; 
          -  typedef implementation_defined                                             iterator;              
          -  typedef implementation_defined                                             const_iterator;        
          -  typedef implementation_defined                                             reverse_iterator;      
          -  typedef implementation_defined                                             const_reverse_iterator;
          -  typedef implementation_defined                                             sequence_type;         
          +  typedef Key                                                    key_type;              
          +  typedef Compare                                                key_compare;           
          +  typedef Key                                                    value_type;            
          +  typedef implementation_defined                                 sequence_type;         
          +  typedef sequence_type::allocator_type                          allocator_type;        
          +  typedef ::boost::container::allocator_traits< allocator_type > allocator_traits_type; 
          +  typedef sequence_type::pointer                                 pointer;               
          +  typedef sequence_type::const_pointer                           const_pointer;         
          +  typedef sequence_type::reference                               reference;             
          +  typedef sequence_type::const_reference                         const_reference;       
          +  typedef sequence_type::size_type                               size_type;             
          +  typedef sequence_type::difference_type                         difference_type;       
          +  typedef implementation_defined                                 stored_allocator_type; 
          +  typedef implementation_defined                                 value_compare;         
          +  typedef sequence_type::iterator                                iterator;              
          +  typedef sequence_type::const_iterator                          const_iterator;        
          +  typedef sequence_type::reverse_iterator                        reverse_iterator;      
          +  typedef sequence_type::const_reverse_iterator                  const_reverse_iterator;
           
             // construct/copy/destruct
          -  explicit flat_set() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
          -  explicit flat_set(const Compare &);
          -  explicit flat_set(const allocator_type &);
          -  flat_set(const Compare &, const allocator_type &);
          -  template<typename InputIterator> flat_set(InputIterator, InputIterator);
          +  flat_set() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
          +  explicit flat_set(const Compare &);
          +  explicit flat_set(const allocator_type &);
          +  flat_set(const Compare &, const allocator_type &);
          +  template<typename InputIterator> flat_set(InputIterator, InputIterator);
             template<typename InputIterator> 
          -    flat_set(InputIterator, InputIterator, const allocator_type &);
          +    flat_set(InputIterator, InputIterator, const allocator_type &);
             template<typename InputIterator> 
          -    flat_set(InputIterator, InputIterator, const Compare &);
          +    flat_set(InputIterator, InputIterator, const Compare &);
             template<typename InputIterator> 
          -    flat_set(InputIterator, InputIterator, const Compare &, 
          +    flat_set(InputIterator, InputIterator, const Compare &, 
                        const allocator_type &);
             template<typename InputIterator> 
          -    flat_set(ordered_unique_range_t, InputIterator, InputIterator);
          +    flat_set(ordered_unique_range_t, InputIterator, InputIterator);
             template<typename InputIterator> 
          -    flat_set(ordered_unique_range_t, InputIterator, InputIterator, 
          +    flat_set(ordered_unique_range_t, InputIterator, InputIterator, 
                        const Compare &);
             template<typename InputIterator> 
          -    flat_set(ordered_unique_range_t, InputIterator, InputIterator, 
          +    flat_set(ordered_unique_range_t, InputIterator, InputIterator, 
                        const Compare &, const allocator_type &);
          -  flat_set(std::initializer_list< value_type >);
          -  flat_set(std::initializer_list< value_type >, const allocator_type &);
          -  flat_set(std::initializer_list< value_type >, const Compare &);
          -  flat_set(std::initializer_list< value_type >, const Compare &, 
          +  flat_set(std::initializer_list< value_type >);
          +  flat_set(std::initializer_list< value_type >, const allocator_type &);
          +  flat_set(std::initializer_list< value_type >, const Compare &);
          +  flat_set(std::initializer_list< value_type >, const Compare &, 
                      const allocator_type &);
          -  flat_set(ordered_unique_range_t, std::initializer_list< value_type >);
          -  flat_set(ordered_unique_range_t, std::initializer_list< value_type >, 
          +  flat_set(ordered_unique_range_t, std::initializer_list< value_type >);
          +  flat_set(ordered_unique_range_t, std::initializer_list< value_type >, 
                      const Compare &);
          -  flat_set(ordered_unique_range_t, std::initializer_list< value_type >, 
          +  flat_set(ordered_unique_range_t, std::initializer_list< value_type >, 
                      const Compare &, const allocator_type &);
          -  flat_set(const flat_set &);
          -  flat_set(flat_set &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
          -  flat_set(const flat_set &, const allocator_type &);
          -  flat_set(flat_set &&, const allocator_type &);
          -  flat_set & operator=(const flat_set &);
          -  flat_set & operator=(flat_set &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
          -  flat_set & operator=(std::initializer_list< value_type >);
          +  flat_set(const flat_set &);
          +  flat_set(flat_set &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
          +  flat_set(const flat_set &, const allocator_type &);
          +  flat_set(flat_set &&, const allocator_type &);
          +  flat_set & operator=(const flat_set &);
          +  flat_set & operator=(flat_set &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
          +  flat_set & operator=(std::initializer_list< value_type >);
           
          -  // public member functions
          -  allocator_type get_allocator() const noexcept;
          -  stored_allocator_type & get_stored_allocator() noexcept;
          -  const stored_allocator_type & get_stored_allocator() const noexcept;
          -  iterator begin() noexcept;
          -  const_iterator begin() const noexcept;
          -  iterator end() noexcept;
          -  const_iterator end() const noexcept;
          -  reverse_iterator rbegin() noexcept;
          -  const_reverse_iterator rbegin() const noexcept;
          -  reverse_iterator rend() noexcept;
          -  const_reverse_iterator rend() const noexcept;
          -  const_iterator cbegin() const noexcept;
          -  const_iterator cend() const noexcept;
          -  const_reverse_iterator crbegin() const noexcept;
          -  const_reverse_iterator crend() const noexcept;
          -  bool empty() const noexcept;
          -  size_type size() const noexcept;
          -  size_type max_size() const noexcept;
          -  size_type capacity() const noexcept;
          -  void reserve(size_type);
          -  void shrink_to_fit();
          -  template<class... Args> std::pair< iterator, bool > emplace(Args &&...);
          -  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
          -  std::pair< iterator, bool > insert(const value_type &);
          -  std::pair< iterator, bool > insert(value_type &&);
          -  iterator insert(const_iterator, const value_type &);
          -  iterator insert(const_iterator, value_type &&);
          -  template<typename InputIterator> void insert(InputIterator, InputIterator);
          +  // public member functions
          +  allocator_type get_allocator() const noexcept;
          +  stored_allocator_type & get_stored_allocator() noexcept;
          +  const stored_allocator_type & get_stored_allocator() const noexcept;
          +  iterator begin() noexcept;
          +  const_iterator begin() const noexcept;
          +  iterator end() noexcept;
          +  const_iterator end() const noexcept;
          +  reverse_iterator rbegin() noexcept;
          +  const_reverse_iterator rbegin() const noexcept;
          +  reverse_iterator rend() noexcept;
          +  const_reverse_iterator rend() const noexcept;
          +  const_iterator cbegin() const noexcept;
          +  const_iterator cend() const noexcept;
          +  const_reverse_iterator crbegin() const noexcept;
          +  const_reverse_iterator crend() const noexcept;
          +  bool empty() const noexcept;
          +  size_type size() const noexcept;
          +  size_type max_size() const noexcept;
          +  size_type capacity() const noexcept;
          +  void reserve(size_type);
          +  void shrink_to_fit();
          +  template<class... Args> std::pair< iterator, bool > emplace(Args &&...);
          +  template<class... Args> iterator emplace_hint(const_iterator, Args &&...);
          +  std::pair< iterator, bool > insert(const value_type &);
          +  std::pair< iterator, bool > insert(value_type &&);
          +  iterator insert(const_iterator, const value_type &);
          +  iterator insert(const_iterator, value_type &&);
          +  template<typename InputIterator> void insert(InputIterator, InputIterator);
             template<typename InputIterator> 
          -    void insert(ordered_unique_range_t, InputIterator, InputIterator);
          -  void insert(std::initializer_list< value_type >);
          -  void insert(ordered_unique_range_t, std::initializer_list< value_type >);
          -  template<typename C2> void merge(flat_set< Key, C2, Allocator > &);
          -  template<typename C2> void merge(flat_set< Key, C2, Allocator > &&);
          -  template<typename C2> void merge(flat_multiset< Key, C2, Allocator > &);
          -  template<typename C2> void merge(flat_multiset< Key, C2, Allocator > &&);
          -  iterator erase(const_iterator);
          -  size_type erase(const key_type &);
          -  iterator erase(const_iterator, const_iterator);
          -  void swap(flat_set &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
          -  void clear() noexcept;
          -  key_compare key_comp() const;
          -  value_compare value_comp() const;
          -  iterator find(const key_type &);
          -  const_iterator find(const key_type &) const;
          -  iterator nth(size_type) noexcept;
          -  const_iterator nth(size_type) const noexcept;
          -  size_type index_of(iterator) noexcept;
          -  size_type index_of(const_iterator) const noexcept;
          -  size_type count(const key_type &) const;
          -  iterator lower_bound(const key_type &);
          -  const_iterator lower_bound(const key_type &) const;
          -  iterator upper_bound(const key_type &);
          -  const_iterator upper_bound(const key_type &) const;
          +    void insert(ordered_unique_range_t, InputIterator, InputIterator);
          +  void insert(std::initializer_list< value_type >);
          +  void insert(ordered_unique_range_t, std::initializer_list< value_type >);
          +  template<typename C2> 
          +    void merge(flat_set< Key, C2, AllocatorOrContainer > &);
          +  template<typename C2> 
          +    void merge(flat_set< Key, C2, AllocatorOrContainer > &&);
          +  template<typename C2> 
          +    void merge(flat_multiset< Key, C2, AllocatorOrContainer > &);
          +  template<typename C2> 
          +    void merge(flat_multiset< Key, C2, AllocatorOrContainer > &&);
          +  iterator erase(const_iterator);
          +  size_type erase(const key_type &);
          +  iterator erase(const_iterator, const_iterator);
          +  void swap(flat_set &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
          +  void clear() noexcept;
          +  key_compare key_comp() const;
          +  value_compare value_comp() const;
          +  iterator find(const key_type &);
          +  const_iterator find(const key_type &) const;
          +  iterator nth(size_type) noexcept;
          +  const_iterator nth(size_type) const noexcept;
          +  size_type index_of(iterator) noexcept;
          +  size_type index_of(const_iterator) const noexcept;
          +  size_type count(const key_type &) const;
          +  iterator lower_bound(const key_type &);
          +  const_iterator lower_bound(const key_type &) const;
          +  iterator upper_bound(const key_type &);
          +  const_iterator upper_bound(const key_type &) const;
             std::pair< const_iterator, const_iterator > 
          -  equal_range(const key_type &) const;
          -  std::pair< iterator, iterator > equal_range(const key_type &);
          -  sequence_type extract_sequence();
          -  void adopt_sequence(sequence_type &&);
          -  void adopt_sequence(ordered_unique_range_t, sequence_type &&);
          +  equal_range(const key_type &) const;
          +  std::pair< iterator, iterator > equal_range(const key_type &);
          +  sequence_type extract_sequence();
          +  void adopt_sequence(sequence_type &&);
          +  void adopt_sequence(ordered_unique_range_t, sequence_type &&);
           
          -  // friend functions
          -  friend bool operator==(const flat_set &, const flat_set &);
          -  friend bool operator!=(const flat_set &, const flat_set &);
          -  friend bool operator<(const flat_set &, const flat_set &);
          -  friend bool operator>(const flat_set &, const flat_set &);
          -  friend bool operator<=(const flat_set &, const flat_set &);
          -  friend bool operator>=(const flat_set &, const flat_set &);
          -  friend void swap(flat_set &, flat_set &);
          +  // friend functions
          +  friend bool operator==(const flat_set &, const flat_set &);
          +  friend bool operator!=(const flat_set &, const flat_set &);
          +  friend bool operator<(const flat_set &, const flat_set &);
          +  friend bool operator>(const flat_set &, const flat_set &);
          +  friend bool operator<=(const flat_set &, const flat_set &);
          +  friend bool operator>=(const flat_set &, const flat_set &);
          +  friend void swap(flat_set &, flat_set &);
           };
          -

          Description

          +

          Description

          flat_set is a Sorted Associative Container that stores objects of type Key. It is also a Unique Associative Container, meaning that no two elements are the same.

          -

          flat_set is similar to std::set but it's implemented like an ordered vector. This means that inserting a new element into a flat_set invalidates previous iterators and references

          -

          Erasing an element of a flat_set invalidates iterators and references pointing to elements that come after (their keys are bigger) the erased element.

          +

          flat_set is similar to std::set but it's implemented by as an ordered sequence container. The underlying sequence container is by default vector but it can also work user-provided vector-like SequenceContainers (like static_vector or small_vector).

          +

          Using vector-like sequence containers means that inserting a new element into a flat_set might invalidate previous iterators and references (unless that sequence container is stable_vector or a similar container that offers stable pointers and references). Similarly, erasing an element might invalidate iterators and references pointing to elements that come after (their keys are bigger) the erased element.

          This container provides random-access iterators.

          -

          Template Parameters

          +

          Template Parameters

          1. typename Key
            @@ -186,65 +190,71 @@

            is the comparison functor used to order keys

          2. -
            typename Allocator = new_allocator<Key>
            -

            is the allocator to be used to allocate memory for this container

            +
            typename AllocatorOrContainer = new_allocator<Key>
            +

            is either:

            +
              +
            • The allocator to allocate value_types (e.g. allocator< std::pair<Key, T> > ). (in this case sequence_type will be vector<value_type, AllocatorOrContainer>)

            • +
            • The SequenceContainer to be used as the underlying sequence_type. It must be a vector-like sequence container with random-access iterators.

            • +
            +

            +

          -

          +

          flat_set public construct/copy/destruct

          1. -
            explicit flat_set() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
            +
            flat_set() noexcept(container_detail::is_nothrow_default_constructible< AllocatorOrContainer >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

            Effects: Default constructs an empty container.

            Complexity: Constant.

          2. -
            explicit flat_set(const Compare & comp);
            +
            explicit flat_set(const Compare & comp);

            Effects: Constructs an empty container using the specified comparison object.

            Complexity: Constant.

          3. -
            explicit flat_set(const allocator_type & a);
            +
            explicit flat_set(const allocator_type & a);

            Effects: Constructs an empty container using the specified allocator.

            Complexity: Constant.

          4. -
            flat_set(const Compare & comp, const allocator_type & a);
            +
            flat_set(const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty container using the specified comparison object and allocator.

            Complexity: Constant.

          5. template<typename InputIterator> 
            -  flat_set(InputIterator first, InputIterator last);
            + flat_set(InputIterator first, InputIterator last);

            Effects: Constructs an empty container and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

          6. template<typename InputIterator> 
            -  flat_set(InputIterator first, InputIterator last, const allocator_type & a);
            + flat_set(InputIterator first, InputIterator last, const allocator_type & a);

            Effects: Constructs an empty container using the specified allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

          7. template<typename InputIterator> 
            -  flat_set(InputIterator first, InputIterator last, const Compare & comp);
            + flat_set(InputIterator first, InputIterator last, const Compare & comp);

            Effects: Constructs an empty container using the specified comparison object and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

          8. template<typename InputIterator> 
            -  flat_set(InputIterator first, InputIterator last, const Compare & comp, 
            +  flat_set(InputIterator first, InputIterator last, const Compare & comp, 
                        const allocator_type & a);

            Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using comp and otherwise N logN, where N is last - first.

          9. template<typename InputIterator> 
            -  flat_set(ordered_unique_range_t, InputIterator first, InputIterator last);
            + flat_set(ordered_unique_range_t, InputIterator first, InputIterator last);

            Effects: Constructs an empty container and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate and must be unique values.

            Complexity: Linear in N.

            @@ -252,7 +262,7 @@
          10. template<typename InputIterator> 
            -  flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, 
            +  flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, 
                        const Compare & comp);

            Effects: Constructs an empty container using the specified comparison object and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate and must be unique values.

            @@ -261,7 +271,7 @@
          11. template<typename InputIterator> 
            -  flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, 
            +  flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, 
                        const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate and must be unique values.

            @@ -269,35 +279,35 @@

            Note: Non-standard extension.

          12. -
            flat_set(std::initializer_list< value_type > il);
            +
            flat_set(std::initializer_list< value_type > il);

            Effects: Constructs an empty container and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

          13. -
            flat_set(std::initializer_list< value_type > il, const allocator_type & a);
            +
            flat_set(std::initializer_list< value_type > il, const allocator_type & a);

            Effects: Constructs an empty container using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

          14. -
            flat_set(std::initializer_list< value_type > il, const Compare & comp);
            +
            flat_set(std::initializer_list< value_type > il, const Compare & comp);

            Effects: Constructs an empty container using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

          15. -
            flat_set(std::initializer_list< value_type > il, const Compare & comp, 
            +
            flat_set(std::initializer_list< value_type > il, const Compare & comp, 
                      const allocator_type & a);

            Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using comp and otherwise N logN, where N is il.begin() - il.end().

          16. -
            flat_set(ordered_unique_range_t, std::initializer_list< value_type > il);
            +
            flat_set(ordered_unique_range_t, std::initializer_list< value_type > il);

            Effects: Constructs an empty container using the specified comparison object and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            Complexity: Linear in N.

            Note: Non-standard extension.

          17. -
            flat_set(ordered_unique_range_t, std::initializer_list< value_type > il, 
            +
            flat_set(ordered_unique_range_t, std::initializer_list< value_type > il, 
                      const Compare & comp);

            Effects: Constructs an empty container using the specified comparison object and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            @@ -305,7 +315,7 @@

            Note: Non-standard extension.

          18. -
            flat_set(ordered_unique_range_t, std::initializer_list< value_type > il, 
            +
            flat_set(ordered_unique_range_t, std::initializer_list< value_type > il, 
                      const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty container using the specified comparison object and allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            @@ -313,175 +323,175 @@

            Note: Non-standard extension.

          19. -
            flat_set(const flat_set & x);
            +
            flat_set(const flat_set & x);

            Effects: Copy constructs the container.

            Complexity: Linear in x.size().

          20. -
            flat_set(flat_set && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
            +
            flat_set(flat_set && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

            Effects: Move constructs thecontainer. Constructs *this using x's resources.

            Complexity: Constant.

            Postcondition: x is emptied.

          21. -
            flat_set(const flat_set & x, const allocator_type & a);
            +
            flat_set(const flat_set & x, const allocator_type & a);

            Effects: Copy constructs a container using the specified allocator.

            Complexity: Linear in x.size().

          22. -
            flat_set(flat_set && x, const allocator_type & a);
            +
            flat_set(flat_set && x, const allocator_type & a);

            Effects: Move constructs a container using the specified allocator. Constructs *this using x's resources.

            Complexity: Constant if a == x.get_allocator(), linear otherwise

          23. -
            flat_set & operator=(const flat_set & x);
            +
            flat_set & operator=(const flat_set & x);

            Effects: Makes *this a copy of x.

            Complexity: Linear in x.size().

          24. -
            flat_set & operator=(flat_set && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
            +
            flat_set & operator=(flat_set && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

            Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

            Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

          25. -
            flat_set & operator=(std::initializer_list< value_type > il);
            +
            flat_set & operator=(std::initializer_list< value_type > il);

            Effects: Copy all elements from il to *this.

            Complexity: Linear in il.size().

          -

          -flat_set public member functions

          +

          +flat_set public member functions

          1. -
            allocator_type get_allocator() const noexcept;
            +
            allocator_type get_allocator() const noexcept;

            Effects: Returns a copy of the allocator that was passed to the object's constructor.

            Complexity: Constant.

          2. -
            stored_allocator_type & get_stored_allocator() noexcept;
            +
            stored_allocator_type & get_stored_allocator() noexcept;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          3. -
            const stored_allocator_type & get_stored_allocator() const noexcept;
            +
            const stored_allocator_type & get_stored_allocator() const noexcept;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          4. -
            iterator begin() noexcept;
            +
            iterator begin() noexcept;

            Effects: Returns an iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          5. -
            const_iterator begin() const noexcept;
            +
            const_iterator begin() const noexcept;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          6. -
            iterator end() noexcept;
            +
            iterator end() noexcept;

            Effects: Returns an iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          7. -
            const_iterator end() const noexcept;
            +
            const_iterator end() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          8. -
            reverse_iterator rbegin() noexcept;
            +
            reverse_iterator rbegin() noexcept;

            Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          9. -
            const_reverse_iterator rbegin() const noexcept;
            +
            const_reverse_iterator rbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          10. -
            reverse_iterator rend() noexcept;
            +
            reverse_iterator rend() noexcept;

            Effects: Returns a reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          11. -
            const_reverse_iterator rend() const noexcept;
            +
            const_reverse_iterator rend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          12. -
            const_iterator cbegin() const noexcept;
            +
            const_iterator cbegin() const noexcept;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          13. -
            const_iterator cend() const noexcept;
            +
            const_iterator cend() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          14. -
            const_reverse_iterator crbegin() const noexcept;
            +
            const_reverse_iterator crbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          15. -
            const_reverse_iterator crend() const noexcept;
            +
            const_reverse_iterator crend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          16. -
            bool empty() const noexcept;
            +
            bool empty() const noexcept;

            Effects: Returns true if the container contains no elements.

            Throws: Nothing.

            Complexity: Constant.

          17. -
            size_type size() const noexcept;
            +
            size_type size() const noexcept;

            Effects: Returns the number of the elements contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          18. -
            size_type max_size() const noexcept;
            +
            size_type max_size() const noexcept;

            Effects: Returns the largest possible size of the container.

            Throws: Nothing.

            Complexity: Constant.

          19. -
            size_type capacity() const noexcept;
            +
            size_type capacity() const noexcept;

            Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

            Throws: Nothing.

            Complexity: Constant.

          20. -
            void reserve(size_type cnt);
            -

            Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

            -

            Throws: If memory allocation allocation throws or Key's copy constructor throws.

            +
            void reserve(size_type cnt);
            +

            Effects: If n is less than or equal to capacity(), or the underlying container has no reserve member, this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

            +

            Throws: If memory allocation allocation throws or T's copy constructor throws.

            Note: If capacity() is less than "cnt", iterators and references to to values might be invalidated.

          21. -
            void shrink_to_fit();
            +
            void shrink_to_fit();
            Effects: Tries to deallocate the excess of memory created

            Throws: If memory allocation throws, or Key's copy constructor throws.

            Complexity: Linear to size().

          22. -
            template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);
            +
            template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);

            Effects: Inserts an object x of type Key constructed with std::forward<Args>(args)... if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

            @@ -489,35 +499,35 @@
          23. template<class... Args> 
            -  iterator emplace_hint(const_iterator p, Args &&... args);
            + iterator emplace_hint(const_iterator p, Args &&... args);

            Effects: Inserts an object of type Key constructed with std::forward<Args>(args)... in the container if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

            Note: If an element is inserted it might invalidate elements.

          24. -
            std::pair< iterator, bool > insert(const value_type & x);
            +
            std::pair< iterator, bool > insert(const value_type & x);

            Effects: Inserts x if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

            Note: If an element is inserted it might invalidate elements.

          25. -
            std::pair< iterator, bool > insert(value_type && x);
            +
            std::pair< iterator, bool > insert(value_type && x);

            Effects: Inserts a new value_type move constructed from the pair if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic search time plus linear insertion to the elements with bigger keys than x.

            Note: If an element is inserted it might invalidate elements.

          26. -
            iterator insert(const_iterator p, const value_type & x);
            +
            iterator insert(const_iterator p, const value_type & x);

            Effects: Inserts a copy of x in the container if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

            Note: If an element is inserted it might invalidate elements.

          27. -
            iterator insert(const_iterator p, value_type && x);
            +
            iterator insert(const_iterator p, value_type && x);

            Effects: Inserts an element move constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic search time (constant if x is inserted right before p) plus insertion linear to the elements with bigger keys than x.

            @@ -525,7 +535,7 @@
          28. template<typename InputIterator> 
            -  void insert(InputIterator first, InputIterator last);
            + void insert(InputIterator first, InputIterator last);

            Requires: first, last are not iterators into *this.

            Effects: inserts each element from the range [first,last) if and only if there is no element with key equivalent to the key of that element.

            Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

            @@ -533,27 +543,28 @@
          29. template<typename InputIterator> 
            -  void insert(ordered_unique_range_t, InputIterator first, InputIterator last);
            + void insert(ordered_unique_range_t, InputIterator first, InputIterator last);

            Requires: first, last are not iterators into *this and must be ordered according to the predicate and must be unique values.

            Effects: inserts each element from the range [first,last) .This function is more efficient than the normal range creation for ordered ranges.

            Complexity: At most N log(size()+N) (N is the distance from first to last) search time plus N*size() insertion time.

            Note: Non-standard extension. If an element is inserted it might invalidate elements.

          30. -
            void insert(std::initializer_list< value_type > il);
            +
            void insert(std::initializer_list< value_type > il);

            Effects: inserts each element from the range [il.begin(), il.end()) if and only if there is no element with key equivalent to the key of that element.

            Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end()) search time plus N*size() insertion time.

            Note: If an element is inserted it might invalidate elements.

          31. -
            void insert(ordered_unique_range_t, std::initializer_list< value_type > il);
            +
            void insert(ordered_unique_range_t, std::initializer_list< value_type > il);

            Requires: Range [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            Effects: inserts each element from the range [il.begin(), il.end()) .This function is more efficient than the normal range creation for ordered ranges.

            Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end()) search time plus N*size() insertion time.

            Note: Non-standard extension. If an element is inserted it might invalidate elements.

          32. -
            template<typename C2> void merge(flat_set< Key, C2, Allocator > & source);
            +
            template<typename C2> 
            +  void merge(flat_set< Key, C2, AllocatorOrContainer > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -561,7 +572,8 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          33. -
            template<typename C2> void merge(flat_set< Key, C2, Allocator > && source);
            +
            template<typename C2> 
            +  void merge(flat_set< Key, C2, AllocatorOrContainer > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -569,7 +581,8 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          34. -
            template<typename C2> void merge(flat_multiset< Key, C2, Allocator > & source);
            +
            template<typename C2> 
            +  void merge(flat_multiset< Key, C2, AllocatorOrContainer > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -578,7 +591,7 @@
          35. template<typename C2> 
            -  void merge(flat_multiset< Key, C2, Allocator > && source);
            + void merge(flat_multiset< Key, C2, AllocatorOrContainer > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -586,59 +599,59 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          36. -
            iterator erase(const_iterator p);
            +
            iterator erase(const_iterator p);

            Effects: Erases the element pointed to by p.

            Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

            Complexity: Linear to the elements with keys bigger than p

            Note: Invalidates elements with keys not less than the erased element.

          37. -
            size_type erase(const key_type & x);
            +
            size_type erase(const key_type & x);

            Effects: Erases all elements in the container with key equivalent to x.

            Returns: Returns the number of erased elements.

            Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

          38. -
            iterator erase(const_iterator first, const_iterator last);
            +
            iterator erase(const_iterator first, const_iterator last);

            Effects: Erases all the elements in the range [first, last).

            Returns: Returns last.

            Complexity: size()*N where N is the distance from first to last.

            Complexity: Logarithmic search time plus erasure time linear to the elements with bigger keys.

          39. -
            void swap(flat_set & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
            +
            void swap(flat_set & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

            Effects: Swaps the contents of *this and x.

            Throws: Nothing.

            Complexity: Constant.

          40. -
            void clear() noexcept;
            +
            void clear() noexcept;

            Effects: erase(a.begin(),a.end()).

            Postcondition: size() == 0.

            Complexity: linear in size().

          41. -
            key_compare key_comp() const;
            +
            key_compare key_comp() const;

            Effects: Returns the comparison object out of which a was constructed.

            Complexity: Constant.

          42. -
            value_compare value_comp() const;
            +
            value_compare value_comp() const;

            Effects: Returns an object of value_compare constructed out of the comparison object.

            Complexity: Constant.

          43. -
            iterator find(const key_type & x);
            +
            iterator find(const key_type & x);

            Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          44. -
            const_iterator find(const key_type & x) const;
            +
            const_iterator find(const key_type & x) const;

            Returns: A const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          45. -
            iterator nth(size_type n) noexcept;
            +
            iterator nth(size_type n) noexcept;

            Requires: size() >= n.

            Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

            Throws: Nothing.

            @@ -646,7 +659,7 @@

            Note: Non-standard extension

          46. -
            const_iterator nth(size_type n) const noexcept;
            +
            const_iterator nth(size_type n) const noexcept;

            Requires: size() >= n.

            Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

            Throws: Nothing.

            @@ -654,7 +667,7 @@

            Note: Non-standard extension

          47. -
            size_type index_of(iterator p) noexcept;
            +
            size_type index_of(iterator p) noexcept;

            Requires: begin() <= p <= end().

            Effects: Returns the index of the element pointed by p and size() if p == end().

            Throws: Nothing.

            @@ -662,7 +675,7 @@

            Note: Non-standard extension

          48. -
            size_type index_of(const_iterator p) const noexcept;
            +
            size_type index_of(const_iterator p) const noexcept;

            Requires: begin() <= p <= end().

            Effects: Returns the index of the element pointed by p and size() if p == end().

            Throws: Nothing.

            @@ -670,56 +683,56 @@

            Note: Non-standard extension

          49. -
            size_type count(const key_type & x) const;
            +
            size_type count(const key_type & x) const;

            Returns: The number of elements with key equivalent to x.

            Complexity: log(size())+count(k)

          50. -
            iterator lower_bound(const key_type & x);
            +
            iterator lower_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          51. -
            const_iterator lower_bound(const key_type & x) const;
            +
            const_iterator lower_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          52. -
            iterator upper_bound(const key_type & x);
            +
            iterator upper_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          53. -
            const_iterator upper_bound(const key_type & x) const;
            +
            const_iterator upper_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          54. std::pair< const_iterator, const_iterator > 
            -equal_range(const key_type & x) const;
            +equal_range(const key_type & x) const;

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          55. -
            std::pair< iterator, iterator > equal_range(const key_type & x);
            +
            std::pair< iterator, iterator > equal_range(const key_type & x);

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          56. -
            sequence_type extract_sequence();
            +
            sequence_type extract_sequence();

            Effects: Extracts the internal sequence container.

            Complexity: Same as the move constructor of sequence_type, usually constant.

            Postcondition: this->empty()

            Throws: If secuence_type's move constructor throws

          57. -
            void adopt_sequence(sequence_type && seq);
            +
            void adopt_sequence(sequence_type && seq);

            Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment. Erases non-unique elements.

            Complexity: Assuming O(1) move assignment, O(NlogN) with N = seq.size()

            Throws: If the comparison or the move constructor throws

          58. -
            void adopt_sequence(ordered_unique_range_t, sequence_type && seq);
            +
            void adopt_sequence(ordered_unique_range_t, sequence_type && seq);

            Requires: seq shall be ordered according to this->compare() and shall contain unique elements.

            Effects: Discards the internally hold sequence container and adopts the one passed externally using the move assignment.

            Complexity: Assuming O(1) move assignment, O(1)

            @@ -728,41 +741,41 @@
          -

          -flat_set friend functions

          +

          +flat_set friend functions

          1. -
            friend bool operator==(const flat_set & x, const flat_set & y);
            +
            friend bool operator==(const flat_set & x, const flat_set & y);

            Effects: Returns true if x and y are equal

            Complexity: Linear to the number of elements in the container.

          2. -
            friend bool operator!=(const flat_set & x, const flat_set & y);
            +
            friend bool operator!=(const flat_set & x, const flat_set & y);

            Effects: Returns true if x and y are unequal

            Complexity: Linear to the number of elements in the container.

          3. -
            friend bool operator<(const flat_set & x, const flat_set & y);
            +
            friend bool operator<(const flat_set & x, const flat_set & y);

            Effects: Returns true if x is less than y

            Complexity: Linear to the number of elements in the container.

          4. -
            friend bool operator>(const flat_set & x, const flat_set & y);
            +
            friend bool operator>(const flat_set & x, const flat_set & y);

            Effects: Returns true if x is greater than y

            Complexity: Linear to the number of elements in the container.

          5. -
            friend bool operator<=(const flat_set & x, const flat_set & y);
            +
            friend bool operator<=(const flat_set & x, const flat_set & y);

            Effects: Returns true if x is equal or less than y

            Complexity: Linear to the number of elements in the container.

          6. -
            friend bool operator>=(const flat_set & x, const flat_set & y);
            +
            friend bool operator>=(const flat_set & x, const flat_set & y);

            Effects: Returns true if x is equal or greater than y

            Complexity: Linear to the number of elements in the container.

          7. -
            friend void swap(flat_set & x, flat_set & y);
            +
            friend void swap(flat_set & x, flat_set & y);

            Effects: x.swap(y)

            Complexity: Constant.

          8. diff --git a/doc/html/boost/container/insert_return_type_base.html b/doc/html/boost/container/insert_return_type_base.html index d160589fdd..ecc32087ef 100644 --- a/doc/html/boost/container/insert_return_type_base.html +++ b/doc/html/boost/container/insert_return_type_base.html @@ -35,11 +35,11 @@ template<typename Iterator, typename NodeType> struct insert_return_type_base { // construct/copy/destruct - insert_return_type_base(); - insert_return_type_base(insert_return_type_base &&); + insert_return_type_base(); + insert_return_type_base(insert_return_type_base &&); template<typename RelatedIt, typename RelatedNode> - insert_return_type_base(bool, RelatedIt, RelatedNode &&); - insert_return_type_base & operator=(insert_return_type_base &&); + insert_return_type_base(bool, RelatedIt, RelatedNode &&); + insert_return_type_base & operator=(insert_return_type_base &&); // public data members bool inserted; @@ -47,7 +47,7 @@ NodeType node; };
          -

          Description

          +

          Description

          A class template used to describe the results of inserting a Container::node_type in a Container with unique keys. Includes at least the following non-static public data members:

          • bool inserted;

          • @@ -58,16 +58,16 @@

            This type is MoveConstructible, MoveAssignable, DefaultConstructible, Destructible, and lvalues of that type are swappable

            -

            +

            insert_return_type_base public construct/copy/destruct

              -
            1. insert_return_type_base();
            2. -
            3. insert_return_type_base(insert_return_type_base && other);
            4. +
            5. insert_return_type_base();
            6. +
            7. insert_return_type_base(insert_return_type_base && other);
            8. template<typename RelatedIt, typename RelatedNode> 
              -  insert_return_type_base(bool insert, RelatedIt it, RelatedNode && node);
            9. -
            10. insert_return_type_base & operator=(insert_return_type_base && other);
            11. + insert_return_type_base(bool insert, RelatedIt it, RelatedNode && node); +
            12. insert_return_type_base & operator=(insert_return_type_base && other);
          diff --git a/doc/html/boost/container/list.html b/doc/html/boost/container/list.html index a710a4003f..f26b96915f 100644 --- a/doc/html/boost/container/list.html +++ b/doc/html/boost/container/list.html @@ -51,108 +51,108 @@ typedef implementation_defined const_reverse_iterator; // construct/copy/destruct - list() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit list(const allocator_type &) noexcept; - explicit list(size_type); - list(size_type, const allocator_type &); - list(size_type, const T &, const Allocator & = Allocator()); - list(const list &); - list(list &&) noexcept; - list(const list &, const allocator_type &); - list(list &&, const allocator_type &); - template<typename InpIt> list(InpIt, InpIt, const Allocator & = Allocator()); - list(std::initializer_list< value_type >, const Allocator & = Allocator()); - list & operator=(const list &); - list & operator=(list &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); - list & operator=(std::initializer_list< value_type >); - ~list(); + list() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit list(const allocator_type &) noexcept; + explicit list(size_type); + list(size_type, const allocator_type &); + list(size_type, const T &, const Allocator & = Allocator()); + list(const list &); + list(list &&) noexcept; + list(const list &, const allocator_type &); + list(list &&, const allocator_type &); + template<typename InpIt> list(InpIt, InpIt, const Allocator & = Allocator()); + list(std::initializer_list< value_type >, const Allocator & = Allocator()); + list & operator=(const list &); + list & operator=(list &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); + list & operator=(std::initializer_list< value_type >); + ~list(); - // public member functions - void assign(size_type, const T &); - template<typename InpIt> void assign(InpIt, InpIt); - void assign(std::initializer_list< value_type >); - allocator_type get_allocator() const noexcept; - stored_allocator_type & get_stored_allocator() noexcept; - const stored_allocator_type & get_stored_allocator() const noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_iterator cbegin() const noexcept; - const_iterator cend() const noexcept; - const_reverse_iterator crbegin() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const noexcept; - size_type size() const noexcept; - size_type max_size() const noexcept; - void resize(size_type); - void resize(size_type, const T &); - reference front() noexcept; - const_reference front() const noexcept; - reference back() noexcept; - const_reference back() const noexcept; - template<class... Args> reference emplace_back(Args &&...); - template<class... Args> reference emplace_front(Args &&...); - template<class... Args> iterator emplace(const_iterator, Args &&...); - void push_front(const T &); - void push_front(T &&); - void push_back(const T &); - void push_back(T &&); - iterator insert(const_iterator, const T &); - iterator insert(const_iterator, T &&); - iterator insert(const_iterator, size_type, const T &); - template<typename InpIt> iterator insert(const_iterator, InpIt, InpIt); - iterator insert(const_iterator, std::initializer_list< value_type >); - void pop_front() noexcept; - void pop_back() noexcept; - iterator erase(const_iterator) noexcept; - iterator erase(const_iterator, const_iterator) noexcept; - void swap(list &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); - void clear() noexcept; - void splice(const_iterator, list &) noexcept; - void splice(const_iterator, list &&) noexcept; - void splice(const_iterator, list &, const_iterator) noexcept; - void splice(const_iterator, list &&, const_iterator) noexcept; - void splice(const_iterator, list &, const_iterator, const_iterator) noexcept; - void splice(const_iterator, list &&, const_iterator, const_iterator) noexcept; - void splice(const_iterator, list &, const_iterator, const_iterator, + // public member functions + void assign(size_type, const T &); + template<typename InpIt> void assign(InpIt, InpIt); + void assign(std::initializer_list< value_type >); + allocator_type get_allocator() const noexcept; + stored_allocator_type & get_stored_allocator() noexcept; + const stored_allocator_type & get_stored_allocator() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const noexcept; + size_type size() const noexcept; + size_type max_size() const noexcept; + void resize(size_type); + void resize(size_type, const T &); + reference front() noexcept; + const_reference front() const noexcept; + reference back() noexcept; + const_reference back() const noexcept; + template<class... Args> reference emplace_back(Args &&...); + template<class... Args> reference emplace_front(Args &&...); + template<class... Args> iterator emplace(const_iterator, Args &&...); + void push_front(const T &); + void push_front(T &&); + void push_back(const T &); + void push_back(T &&); + iterator insert(const_iterator, const T &); + iterator insert(const_iterator, T &&); + iterator insert(const_iterator, size_type, const T &); + template<typename InpIt> iterator insert(const_iterator, InpIt, InpIt); + iterator insert(const_iterator, std::initializer_list< value_type >); + void pop_front() noexcept; + void pop_back() noexcept; + iterator erase(const_iterator) noexcept; + iterator erase(const_iterator, const_iterator) noexcept; + void swap(list &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); + void clear() noexcept; + void splice(const_iterator, list &) noexcept; + void splice(const_iterator, list &&) noexcept; + void splice(const_iterator, list &, const_iterator) noexcept; + void splice(const_iterator, list &&, const_iterator) noexcept; + void splice(const_iterator, list &, const_iterator, const_iterator) noexcept; + void splice(const_iterator, list &&, const_iterator, const_iterator) noexcept; + void splice(const_iterator, list &, const_iterator, const_iterator, size_type) noexcept; - void splice(const_iterator, list &&, const_iterator, const_iterator, + void splice(const_iterator, list &&, const_iterator, const_iterator, size_type) noexcept; - void remove(const T &); - template<typename Pred> void remove_if(Pred); - void unique(); - template<typename BinaryPredicate> void unique(BinaryPredicate); - void merge(list &); - void merge(list &&); + void remove(const T &); + template<typename Pred> void remove_if(Pred); + void unique(); + template<typename BinaryPredicate> void unique(BinaryPredicate); + void merge(list &); + void merge(list &&); template<typename StrictWeakOrdering> - void merge(list &, const StrictWeakOrdering &); + void merge(list &, const StrictWeakOrdering &); template<typename StrictWeakOrdering> - void merge(list &&, StrictWeakOrdering); - void sort(); - template<typename StrictWeakOrdering> void sort(StrictWeakOrdering); - void reverse() noexcept; + void merge(list &&, StrictWeakOrdering); + void sort(); + template<typename StrictWeakOrdering> void sort(StrictWeakOrdering); + void reverse() noexcept; - // friend functions - friend bool operator==(const list &, const list &); - friend bool operator!=(const list &, const list &); - friend bool operator<(const list &, const list &); - friend bool operator>(const list &, const list &); - friend bool operator<=(const list &, const list &); - friend bool operator>=(const list &, const list &); - friend void swap(list &, list &); + // friend functions + friend bool operator==(const list &, const list &); + friend bool operator!=(const list &, const list &); + friend bool operator<(const list &, const list &); + friend bool operator>(const list &, const list &); + friend bool operator<=(const list &, const list &); + friend bool operator>=(const list &, const list &); + friend void swap(list &, list &); };
          -

          Description

          +

          Description

          A list is a doubly linked list. That is, it is a Sequence that supports both forward and backward traversal, and (amortized) constant time insertion and removal of elements at the beginning or the end, or in the middle. Lists have the important property that insertion and splicing do not invalidate iterators to list elements, and that even removal invalidates only the iterators that point to the elements that are removed. The ordering of iterators may be changed (that is, list<T>::iterator might have a different predecessor or successor after a list operation than it did before), but the iterators themselves will not be invalidated or made to point to different elements unless that invalidation or mutation is explicit.

          -

          Template Parameters

          +

          Template Parameters

          1. typename T
            @@ -165,104 +165,104 @@
          -

          +

          list public construct/copy/destruct

          1. -
            list() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
            +
            list() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));

            Effects: Default constructs a list.

            Throws: If allocator_type's default constructor throws.

            Complexity: Constant.

          2. -
            explicit list(const allocator_type & a) noexcept;
            +
            explicit list(const allocator_type & a) noexcept;

            Effects: Constructs a list taking the allocator as parameter.

            Throws: Nothing

            Complexity: Constant.

          3. -
            explicit list(size_type n);
            +
            explicit list(size_type n);

            Effects: Constructs a list and inserts n value-initialized value_types.

            Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

            Complexity: Linear to n.

          4. -
            list(size_type n, const allocator_type & a);
            +
            list(size_type n, const allocator_type & a);

            Effects: Constructs a list that will use a copy of allocator a and inserts n copies of value.

            Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

            Complexity: Linear to n.

          5. -
            list(size_type n, const T & value, const Allocator & a = Allocator());
            +
            list(size_type n, const T & value, const Allocator & a = Allocator());

            Effects: Constructs a list that will use a copy of allocator a and inserts n copies of value.

            Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

            Complexity: Linear to n.

          6. -
            list(const list & x);
            +
            list(const list & x);

            Effects: Copy constructs a list.

            Postcondition: x == *this.

            Throws: If allocator_type's default constructor throws.

            Complexity: Linear to the elements x contains.

          7. -
            list(list && x) noexcept;
            +
            list(list && x) noexcept;

            Effects: Move constructor. Moves x's resources to *this.

            Throws: If allocator_type's copy constructor throws.

            Complexity: Constant.

          8. -
            list(const list & x, const allocator_type & a);
            +
            list(const list & x, const allocator_type & a);

            Effects: Copy constructs a list using the specified allocator.

            Postcondition: x == *this.

            Throws: If allocator_type's default constructor or copy constructor throws.

            Complexity: Linear to the elements x contains.

          9. -
            list(list && x, const allocator_type & a);
            +
            list(list && x, const allocator_type & a);

            Effects: Move constructor sing the specified allocator. Moves x's resources to *this.

            Throws: If allocation or value_type's copy constructor throws.

            Complexity: Constant if a == x.get_allocator(), linear otherwise.

          10. template<typename InpIt> 
            -  list(InpIt first, InpIt last, const Allocator & a = Allocator());
            + list(InpIt first, InpIt last, const Allocator & a = Allocator());

            Effects: Constructs a list that will use a copy of allocator a and inserts a copy of the range [first, last) in the list.

            Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced InIt throws.

            Complexity: Linear to the range [first, last).

          11. -
            list(std::initializer_list< value_type > il, 
            +
            list(std::initializer_list< value_type > il, 
                  const Allocator & a = Allocator());

            Effects: Constructs a list that will use a copy of allocator a and inserts a copy of the range [il.begin(), il.end()) in the list.

            Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced std::initializer_list iterator throws.

            Complexity: Linear to the range [il.begin(), il.end()).

          12. -
            list & operator=(const list & x);
            +
            list & operator=(const list & x);

            Effects: Makes *this contain the same elements as x.

            Postcondition: this->size() == x.size(). *this contains a copy of each of x's elements.

            Throws: If memory allocation throws or T's copy constructor throws.

            Complexity: Linear to the number of elements in x.

          13. -
            list & operator=(list && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));
            +
            list & operator=(list && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));

            Effects: Move assignment. All x's values are transferred to *this.

            Postcondition: x.empty(). *this contains a the elements x had before the function.

            Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

            Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

          14. -
            list & operator=(std::initializer_list< value_type > il);
            +
            list & operator=(std::initializer_list< value_type > il);

            Effects: Makes *this contain the same elements as il.

            Postcondition: this->size() == il.size(). *this contains a copy of each of x's elements.

            Throws: If memory allocation throws or T's copy constructor throws.

            Complexity: Linear to the number of elements in x.

          15. -
            ~list();
            +
            ~list();

            Effects: Destroys the list. All stored values are destroyed and used memory is deallocated.

            Throws: Nothing.

            Complexity: Linear to the number of elements.

            @@ -270,186 +270,186 @@
          -

          -list public member functions

          +

          +list public member functions

          1. -
            void assign(size_type n, const T & val);
            +
            void assign(size_type n, const T & val);

            Effects: Assigns the n copies of val to *this.

            Throws: If memory allocation throws or T's copy constructor throws.

            Complexity: Linear to n.

          2. -
            template<typename InpIt> void assign(InpIt first, InpIt last);
            +
            template<typename InpIt> void assign(InpIt first, InpIt last);

            Effects: Assigns the range [first, last) to *this.

            Throws: If memory allocation throws or T's constructor from dereferencing InpIt throws.

            Complexity: Linear to n.

          3. -
            void assign(std::initializer_list< value_type > il);
            +
            void assign(std::initializer_list< value_type > il);

            Effects: Assigns the range [il.begin(), il.end()) to *this.

            Throws: If memory allocation throws or T's constructor from dereferencing std::initializer_list iterator throws.

            Complexity: Linear to n.

          4. -
            allocator_type get_allocator() const noexcept;
            +
            allocator_type get_allocator() const noexcept;

            Effects: Returns a copy of the internal allocator.

            Throws: If allocator's copy constructor throws.

            Complexity: Constant.

          5. -
            stored_allocator_type & get_stored_allocator() noexcept;
            +
            stored_allocator_type & get_stored_allocator() noexcept;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          6. -
            const stored_allocator_type & get_stored_allocator() const noexcept;
            +
            const stored_allocator_type & get_stored_allocator() const noexcept;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          7. -
            iterator begin() noexcept;
            +
            iterator begin() noexcept;

            Effects: Returns an iterator to the first element contained in the list.

            Throws: Nothing.

            Complexity: Constant.

          8. -
            const_iterator begin() const noexcept;
            +
            const_iterator begin() const noexcept;

            Effects: Returns a const_iterator to the first element contained in the list.

            Throws: Nothing.

            Complexity: Constant.

          9. -
            iterator end() noexcept;
            +
            iterator end() noexcept;

            Effects: Returns an iterator to the end of the list.

            Throws: Nothing.

            Complexity: Constant.

          10. -
            const_iterator end() const noexcept;
            +
            const_iterator end() const noexcept;

            Effects: Returns a const_iterator to the end of the list.

            Throws: Nothing.

            Complexity: Constant.

          11. -
            reverse_iterator rbegin() noexcept;
            +
            reverse_iterator rbegin() noexcept;

            Effects: Returns a reverse_iterator pointing to the beginning of the reversed list.

            Throws: Nothing.

            Complexity: Constant.

          12. -
            const_reverse_iterator rbegin() const noexcept;
            +
            const_reverse_iterator rbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed list.

            Throws: Nothing.

            Complexity: Constant.

          13. -
            reverse_iterator rend() noexcept;
            +
            reverse_iterator rend() noexcept;

            Effects: Returns a reverse_iterator pointing to the end of the reversed list.

            Throws: Nothing.

            Complexity: Constant.

          14. -
            const_reverse_iterator rend() const noexcept;
            +
            const_reverse_iterator rend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed list.

            Throws: Nothing.

            Complexity: Constant.

          15. -
            const_iterator cbegin() const noexcept;
            +
            const_iterator cbegin() const noexcept;

            Effects: Returns a const_iterator to the first element contained in the list.

            Throws: Nothing.

            Complexity: Constant.

          16. -
            const_iterator cend() const noexcept;
            +
            const_iterator cend() const noexcept;

            Effects: Returns a const_iterator to the end of the list.

            Throws: Nothing.

            Complexity: Constant.

          17. -
            const_reverse_iterator crbegin() const noexcept;
            +
            const_reverse_iterator crbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed list.

            Throws: Nothing.

            Complexity: Constant.

          18. -
            const_reverse_iterator crend() const noexcept;
            +
            const_reverse_iterator crend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed list.

            Throws: Nothing.

            Complexity: Constant.

          19. -
            bool empty() const noexcept;
            +
            bool empty() const noexcept;

            Effects: Returns true if the list contains no elements.

            Throws: Nothing.

            Complexity: Constant.

          20. -
            size_type size() const noexcept;
            +
            size_type size() const noexcept;

            Effects: Returns the number of the elements contained in the list.

            Throws: Nothing.

            Complexity: Constant.

          21. -
            size_type max_size() const noexcept;
            +
            size_type max_size() const noexcept;

            Effects: Returns the largest possible size of the list.

            Throws: Nothing.

            Complexity: Constant.

          22. -
            void resize(size_type new_size);
            +
            void resize(size_type new_size);

            Effects: Inserts or erases elements at the end such that the size becomes n. New elements are value initialized.

            Throws: If memory allocation throws, or T's copy constructor throws.

            Complexity: Linear to the difference between size() and new_size.

          23. -
            void resize(size_type new_size, const T & x);
            +
            void resize(size_type new_size, const T & x);

            Effects: Inserts or erases elements at the end such that the size becomes n. New elements are copy constructed from x.

            Throws: If memory allocation throws, or T's copy constructor throws.

            Complexity: Linear to the difference between size() and new_size.

          24. -
            reference front() noexcept;
            +
            reference front() noexcept;

            Requires: !empty()

            Effects: Returns a reference to the first element from the beginning of the container.

            Throws: Nothing.

            Complexity: Constant.

          25. -
            const_reference front() const noexcept;
            +
            const_reference front() const noexcept;

            Requires: !empty()

            Effects: Returns a const reference to the first element from the beginning of the container.

            Throws: Nothing.

            Complexity: Constant.

          26. -
            reference back() noexcept;
            +
            reference back() noexcept;

            Requires: !empty()

            Effects: Returns a reference to the first element from the beginning of the container.

            Throws: Nothing.

            Complexity: Constant.

          27. -
            const_reference back() const noexcept;
            +
            const_reference back() const noexcept;

            Requires: !empty()

            Effects: Returns a const reference to the first element from the beginning of the container.

            Throws: Nothing.

            Complexity: Constant.

          28. -
            template<class... Args> reference emplace_back(Args &&... args);
            +
            template<class... Args> reference emplace_back(Args &&... args);

            Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the end of the list.

            Returns: A reference to the created object.

            Throws: If memory allocation throws or T's in-place constructor throws.

            Complexity: Constant

          29. -
            template<class... Args> reference emplace_front(Args &&... args);
            +
            template<class... Args> reference emplace_front(Args &&... args);

            Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the beginning of the list.

            Returns: A reference to the created object.

            Throws: If memory allocation throws or T's in-place constructor throws.

            @@ -457,37 +457,37 @@
          30. template<class... Args> 
            -  iterator emplace(const_iterator position, Args &&... args);
            + iterator emplace(const_iterator position, Args &&... args);

            Effects: Inserts an object of type T constructed with std::forward<Args>(args)... before p.

            Throws: If memory allocation throws or T's in-place constructor throws.

            Complexity: Constant

          31. -
            void push_front(const T & x);
            +
            void push_front(const T & x);

            Effects: Inserts a copy of x at the beginning of the list.

            Throws: If memory allocation throws or T's copy constructor throws.

            Complexity: Amortized constant time.

          32. -
            void push_front(T && x);
            +
            void push_front(T && x);

            Effects: Constructs a new element in the beginning of the list and moves the resources of x to this new element.

            Throws: If memory allocation throws.

            Complexity: Amortized constant time.

          33. -
            void push_back(const T & x);
            +
            void push_back(const T & x);

            Effects: Inserts a copy of x at the end of the list.

            Throws: If memory allocation throws or T's copy constructor throws.

            Complexity: Amortized constant time.

          34. -
            void push_back(T && x);
            +
            void push_back(T && x);

            Effects: Constructs a new element in the end of the list and moves the resources of x to this new element.

            Throws: If memory allocation throws.

            Complexity: Amortized constant time.

          35. -
            iterator insert(const_iterator p, const T & x);
            +
            iterator insert(const_iterator p, const T & x);

            Requires: p must be a valid iterator of *this.

            Effects: Insert a copy of x before p.

            Returns: an iterator to the inserted element.

            @@ -495,7 +495,7 @@

            Complexity: Amortized constant time.

          36. -
            iterator insert(const_iterator p, T && x);
            +
            iterator insert(const_iterator p, T && x);

            Requires: p must be a valid iterator of *this.

            Effects: Insert a new element before p with x's resources.

            Returns: an iterator to the inserted element.

            @@ -503,7 +503,7 @@

            Complexity: Amortized constant time.

          37. -
            iterator insert(const_iterator position, size_type n, const T & x);
            +
            iterator insert(const_iterator position, size_type n, const T & x);

            Requires: p must be a valid iterator of *this.

            Effects: Inserts n copies of x before p.

            Returns: an iterator to the first inserted element or p if n is 0.

            @@ -512,7 +512,7 @@
          38. template<typename InpIt> 
            -  iterator insert(const_iterator p, InpIt first, InpIt last);
            + iterator insert(const_iterator p, InpIt first, InpIt last);

            Requires: p must be a valid iterator of *this.

            Effects: Insert a copy of the [first, last) range before p.

            Returns: an iterator to the first inserted element or p if first == last.

            @@ -520,7 +520,7 @@

            Complexity: Linear to distance [first, last).

          39. -
            iterator insert(const_iterator p, std::initializer_list< value_type > il);
            +
            iterator insert(const_iterator p, std::initializer_list< value_type > il);

            Requires: p must be a valid iterator of *this.

            Effects: Insert a copy of the [il.begin(), il.end()) range before p.

            Returns: an iterator to the first inserted element or p if if.begin() == il.end().

            @@ -528,45 +528,45 @@

            Complexity: Linear to distance [il.begin(), il.end()).

          40. -
            void pop_front() noexcept;
            +
            void pop_front() noexcept;

            Effects: Removes the first element from the list.

            Throws: Nothing.

            Complexity: Amortized constant time.

          41. -
            void pop_back() noexcept;
            +
            void pop_back() noexcept;

            Effects: Removes the last element from the list.

            Throws: Nothing.

            Complexity: Amortized constant time.

          42. -
            iterator erase(const_iterator p) noexcept;
            +
            iterator erase(const_iterator p) noexcept;

            Requires: p must be a valid iterator of *this.

            Effects: Erases the element at p.

            Throws: Nothing.

            Complexity: Amortized constant time.

          43. -
            iterator erase(const_iterator first, const_iterator last) noexcept;
            +
            iterator erase(const_iterator first, const_iterator last) noexcept;

            Requires: first and last must be valid iterator to elements in *this.

            Effects: Erases the elements pointed by [first, last).

            Throws: Nothing.

            Complexity: Linear to the distance between first and last.

          44. -
            void swap(list & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));
            +
            void swap(list & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));

            Effects: Swaps the contents of *this and x.

            Throws: Nothing.

            Complexity: Constant.

          45. -
            void clear() noexcept;
            +
            void clear() noexcept;

            Effects: Erases all the elements of the list.

            Throws: Nothing.

            Complexity: Linear to the number of elements in the list.

          46. -
            void splice(const_iterator p, list & x) noexcept;
            +
            void splice(const_iterator p, list & x) noexcept;

            Requires: p must point to an element contained by the list. x != *this. this' allocator and x's allocator shall compare equal

            Effects: Transfers all the elements of list x to this list, before the the element pointed by p. No destructors or copy constructors are called.

            Throws: Nothing

            @@ -574,7 +574,7 @@

            Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

          47. -
            void splice(const_iterator p, list && x) noexcept;
            +
            void splice(const_iterator p, list && x) noexcept;

            Requires: p must point to an element contained by the list. x != *this. this' allocator and x's allocator shall compare equal

            Effects: Transfers all the elements of list x to this list, before the the element pointed by p. No destructors or copy constructors are called.

            Throws: Nothing

            @@ -582,7 +582,7 @@

            Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

          48. -
            void splice(const_iterator p, list & x, const_iterator i) noexcept;
            +
            void splice(const_iterator p, list & x, const_iterator i) noexcept;

            Requires: p must point to an element contained by this list. i must point to an element contained in list x. this' allocator and x's allocator shall compare equal

            Effects: Transfers the value pointed by i, from list x to this list, before the element pointed by p. No destructors or copy constructors are called. If p == i or p == ++i, this function is a null operation.

            Throws: Nothing

            @@ -590,7 +590,7 @@

            Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

          49. -
            void splice(const_iterator p, list && x, const_iterator i) noexcept;
            +
            void splice(const_iterator p, list && x, const_iterator i) noexcept;

            Requires: p must point to an element contained by this list. i must point to an element contained in list x. this' allocator and x's allocator shall compare equal.

            Effects: Transfers the value pointed by i, from list x to this list, before the element pointed by p. No destructors or copy constructors are called. If p == i or p == ++i, this function is a null operation.

            Throws: Nothing

            @@ -598,7 +598,7 @@

            Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

          50. -
            void splice(const_iterator p, list & x, const_iterator first, 
            +
            void splice(const_iterator p, list & x, const_iterator first, 
                         const_iterator last) noexcept;

            Requires: p must point to an element contained by this list. first and last must point to elements contained in list x. this' allocator and x's allocator shall compare equal

            Effects: Transfers the range pointed by first and last from list x to this list, before the element pointed by p. No destructors or copy constructors are called.

            @@ -607,7 +607,7 @@

            Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

          51. -
            void splice(const_iterator p, list && x, const_iterator first, 
            +
            void splice(const_iterator p, list && x, const_iterator first, 
                         const_iterator last) noexcept;

            Requires: p must point to an element contained by this list. first and last must point to elements contained in list x. this' allocator and x's allocator shall compare equal.

            Effects: Transfers the range pointed by first and last from list x to this list, before the element pointed by p. No destructors or copy constructors are called.

            @@ -616,7 +616,7 @@

            Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

          52. -
            void splice(const_iterator p, list & x, const_iterator first, 
            +
            void splice(const_iterator p, list & x, const_iterator first, 
                         const_iterator last, size_type n) noexcept;

            Requires: p must point to an element contained by this list. first and last must point to elements contained in list x. n == distance(first, last). this' allocator and x's allocator shall compare equal

            Effects: Transfers the range pointed by first and last from list x to this list, before the element pointed by p. No destructors or copy constructors are called.

            @@ -626,7 +626,7 @@

            Note: Non-standard extension

          53. -
            void splice(const_iterator p, list && x, const_iterator first, 
            +
            void splice(const_iterator p, list && x, const_iterator first, 
                         const_iterator last, size_type n) noexcept;

            Requires: p must point to an element contained by this list. first and last must point to elements contained in list x. n == distance(first, last). this' allocator and x's allocator shall compare equal

            Effects: Transfers the range pointed by first and last from list x to this list, before the element pointed by p. No destructors or copy constructors are called.

            @@ -636,42 +636,42 @@

            Note: Non-standard extension

          54. -
            void remove(const T & value);
            +
            void remove(const T & value);

            Effects: Removes all the elements that compare equal to value.

            Throws: If comparison throws.

            Complexity: Linear time. It performs exactly size() comparisons for equality.

            Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

          55. -
            template<typename Pred> void remove_if(Pred pred);
            +
            template<typename Pred> void remove_if(Pred pred);

            Effects: Removes all the elements for which a specified predicate is satisfied.

            Throws: If pred throws.

            Complexity: Linear time. It performs exactly size() calls to the predicate.

            Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

          56. -
            void unique();
            +
            void unique();

            Effects: Removes adjacent duplicate elements or adjacent elements that are equal from the list.

            Throws: If comparison throws.

            Complexity: Linear time (size()-1 comparisons equality comparisons).

            Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

          57. -
            template<typename BinaryPredicate> void unique(BinaryPredicate binary_pred);
            +
            template<typename BinaryPredicate> void unique(BinaryPredicate binary_pred);

            Effects: Removes adjacent duplicate elements or adjacent elements that satisfy some binary predicate from the list.

            Throws: If pred throws.

            Complexity: Linear time (size()-1 comparisons calls to pred()).

            Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

          58. -
            void merge(list & x);
            +
            void merge(list & x);

            Requires: The lists x and *this must be distinct.

            Effects: This function removes all of x's elements and inserts them in order into *this according to std::less<value_type>. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

            Throws: If comparison throws.

            Complexity: This function is linear time: it performs at most size() + x.size() - 1 comparisons.

          59. -
            void merge(list && x);
            +
            void merge(list && x);

            Requires: The lists x and *this must be distinct.

            Effects: This function removes all of x's elements and inserts them in order into *this according to std::less<value_type>. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

            Throws: If comparison throws.

            @@ -679,7 +679,7 @@
          60. template<typename StrictWeakOrdering> 
            -  void merge(list & x, const StrictWeakOrdering & comp);
            + void merge(list & x, const StrictWeakOrdering & comp);

            Requires: p must be a comparison function that induces a strict weak ordering and both *this and x must be sorted according to that ordering The lists x and *this must be distinct.

            Effects: This function removes all of x's elements and inserts them in order into *this. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

            Throws: If comp throws.

            @@ -688,7 +688,7 @@
          61. template<typename StrictWeakOrdering> 
            -  void merge(list && x, StrictWeakOrdering comp);
            + void merge(list && x, StrictWeakOrdering comp);

            Requires: p must be a comparison function that induces a strict weak ordering and both *this and x must be sorted according to that ordering The lists x and *this must be distinct.

            Effects: This function removes all of x's elements and inserts them in order into *this. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

            Throws: If comp throws.

            @@ -696,21 +696,21 @@

            Note: Iterators and references to *this are not invalidated.

          62. -
            void sort();
            +
            void sort();

            Effects: This function sorts the list *this according to std::less<value_type>. The sort is stable, that is, the relative order of equivalent elements is preserved.

            Throws: If comparison throws.

            Notes: Iterators and references are not invalidated.

            Complexity: The number of comparisons is approximately N log N, where N is the list's size.

          63. -
            template<typename StrictWeakOrdering> void sort(StrictWeakOrdering comp);
            +
            template<typename StrictWeakOrdering> void sort(StrictWeakOrdering comp);

            Effects: This function sorts the list *this according to std::less<value_type>. The sort is stable, that is, the relative order of equivalent elements is preserved.

            Throws: If comp throws.

            Notes: Iterators and references are not invalidated.

            Complexity: The number of comparisons is approximately N log N, where N is the list's size.

          64. -
            void reverse() noexcept;
            +
            void reverse() noexcept;

            Effects: Reverses the order of elements in the list.

            Throws: Nothing.

            Complexity: This function is linear time.

            @@ -719,41 +719,41 @@
          -

          -list friend functions

          +

          +list friend functions

          1. -
            friend bool operator==(const list & x, const list & y);
            +
            friend bool operator==(const list & x, const list & y);

            Effects: Returns true if x and y are equal

            Complexity: Linear to the number of elements in the container.

          2. -
            friend bool operator!=(const list & x, const list & y);
            +
            friend bool operator!=(const list & x, const list & y);

            Effects: Returns true if x and y are unequal

            Complexity: Linear to the number of elements in the container.

          3. -
            friend bool operator<(const list & x, const list & y);
            +
            friend bool operator<(const list & x, const list & y);

            Effects: Returns true if x is less than y

            Complexity: Linear to the number of elements in the container.

          4. -
            friend bool operator>(const list & x, const list & y);
            +
            friend bool operator>(const list & x, const list & y);

            Effects: Returns true if x is greater than y

            Complexity: Linear to the number of elements in the container.

          5. -
            friend bool operator<=(const list & x, const list & y);
            +
            friend bool operator<=(const list & x, const list & y);

            Effects: Returns true if x is equal or less than y

            Complexity: Linear to the number of elements in the container.

          6. -
            friend bool operator>=(const list & x, const list & y);
            +
            friend bool operator>=(const list & x, const list & y);

            Effects: Returns true if x is equal or greater than y

            Complexity: Linear to the number of elements in the container.

          7. -
            friend void swap(list & x, list & y);
            +
            friend void swap(list & x, list & y);

            Effects: x.swap(y)

            Complexity: Constant.

          8. diff --git a/doc/html/boost/container/map.html b/doc/html/boost/container/map.html index e8e5c5ca67..9b1d1b6b4e 100644 --- a/doc/html/boost/container/map.html +++ b/doc/html/boost/container/map.html @@ -62,141 +62,141 @@ typedef implementation_defined insert_return_type; // construct/copy/destruct - map() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); - map(const Compare &, const allocator_type &); - explicit map(const Compare &); - explicit map(const allocator_type &); - template<typename InputIterator> map(InputIterator, InputIterator); + map() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); + map(const Compare &, const allocator_type &); + explicit map(const Compare &); + explicit map(const allocator_type &); + template<typename InputIterator> map(InputIterator, InputIterator); template<typename InputIterator> - map(InputIterator, InputIterator, const allocator_type &); + map(InputIterator, InputIterator, const allocator_type &); template<typename InputIterator> - map(InputIterator, InputIterator, const Compare &); + map(InputIterator, InputIterator, const Compare &); template<typename InputIterator> - map(InputIterator, InputIterator, const Compare &, const allocator_type &); + map(InputIterator, InputIterator, const Compare &, const allocator_type &); template<typename InputIterator> - map(ordered_unique_range_t, InputIterator, InputIterator); + map(ordered_unique_range_t, InputIterator, InputIterator); template<typename InputIterator> - map(ordered_unique_range_t, InputIterator, InputIterator, const Compare &); + map(ordered_unique_range_t, InputIterator, InputIterator, const Compare &); template<typename InputIterator> - map(ordered_unique_range_t, InputIterator, InputIterator, const Compare &, + map(ordered_unique_range_t, InputIterator, InputIterator, const Compare &, const allocator_type &); - map(std::initializer_list< value_type >); - map(std::initializer_list< value_type >, const Compare &); - map(std::initializer_list< value_type >, const allocator_type &); - map(std::initializer_list< value_type >, const Compare &, + map(std::initializer_list< value_type >); + map(std::initializer_list< value_type >, const Compare &); + map(std::initializer_list< value_type >, const allocator_type &); + map(std::initializer_list< value_type >, const Compare &, const allocator_type &); - map(ordered_unique_range_t, std::initializer_list< value_type >); - map(ordered_unique_range_t, std::initializer_list< value_type >, + map(ordered_unique_range_t, std::initializer_list< value_type >); + map(ordered_unique_range_t, std::initializer_list< value_type >, const Compare &); - map(ordered_unique_range_t, std::initializer_list< value_type >, + map(ordered_unique_range_t, std::initializer_list< value_type >, const Compare &, const allocator_type &); - map(const map &); - map(map &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); - map(const map &, const allocator_type &); - map(map &&, const allocator_type &); - map & operator=(const map &); - map & operator=(map &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); - map & operator=(std::initializer_list< value_type >); + map(const map &); + map(map &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); + map(const map &, const allocator_type &); + map(map &&, const allocator_type &); + map & operator=(const map &); + map & operator=(map &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); + map & operator=(std::initializer_list< value_type >); - // public member functions - BOOST_STATIC_ASSERT(unspecified); - allocator_type get_allocator() const; - stored_allocator_type & get_stored_allocator() noexcept; - const stored_allocator_type & get_stored_allocator() const noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - const_iterator cbegin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - const_iterator cend() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - const_reverse_iterator crbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const noexcept; - size_type size() const noexcept; - size_type max_size() const noexcept; - mapped_type & operator[](const key_type &); - mapped_type & operator[](key_type &&); + // public member functions + BOOST_STATIC_ASSERT(unspecified); + allocator_type get_allocator() const; + stored_allocator_type & get_stored_allocator() noexcept; + const stored_allocator_type & get_stored_allocator() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + const_iterator cbegin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator crbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const noexcept; + size_type size() const noexcept; + size_type max_size() const noexcept; + mapped_type & operator[](const key_type &); + mapped_type & operator[](key_type &&); template<typename M> - std::pair< iterator, bool > insert_or_assign(const key_type &, M &&); + std::pair< iterator, bool > insert_or_assign(const key_type &, M &&); template<typename M> - std::pair< iterator, bool > insert_or_assign(key_type &&, M &&); + std::pair< iterator, bool > insert_or_assign(key_type &&, M &&); template<typename M> - iterator insert_or_assign(const_iterator, const key_type &, M &&); + iterator insert_or_assign(const_iterator, const key_type &, M &&); template<typename M> - iterator insert_or_assign(const_iterator, key_type &&, M &&); - T & at(const key_type &); - const T & at(const key_type &) const; - std::pair< iterator, bool > insert(const value_type &); - std::pair< iterator, bool > insert(const nonconst_value_type &); - std::pair< iterator, bool > insert(nonconst_value_type &&); - std::pair< iterator, bool > insert(movable_value_type &&); - std::pair< iterator, bool > insert(value_type &&); - iterator insert(const_iterator, const value_type &); - iterator insert(const_iterator, nonconst_value_type &&); - iterator insert(const_iterator, movable_value_type &&); - iterator insert(const_iterator, const nonconst_value_type &); - iterator insert(const_iterator, value_type &&); - template<typename InputIterator> void insert(InputIterator, InputIterator); - void insert(std::initializer_list< value_type >); - insert_return_type insert(node_type &&); - insert_return_type insert(const_iterator, node_type &&); - template<class... Args> std::pair< iterator, bool > emplace(Args &&...); - template<class... Args> iterator emplace_hint(const_iterator, Args &&...); + iterator insert_or_assign(const_iterator, key_type &&, M &&); + T & at(const key_type &); + const T & at(const key_type &) const; + std::pair< iterator, bool > insert(const value_type &); + std::pair< iterator, bool > insert(const nonconst_value_type &); + std::pair< iterator, bool > insert(nonconst_value_type &&); + std::pair< iterator, bool > insert(movable_value_type &&); + std::pair< iterator, bool > insert(value_type &&); + iterator insert(const_iterator, const value_type &); + iterator insert(const_iterator, nonconst_value_type &&); + iterator insert(const_iterator, movable_value_type &&); + iterator insert(const_iterator, const nonconst_value_type &); + iterator insert(const_iterator, value_type &&); + template<typename InputIterator> void insert(InputIterator, InputIterator); + void insert(std::initializer_list< value_type >); + insert_return_type insert(node_type &&); + insert_return_type insert(const_iterator, node_type &&); + template<class... Args> std::pair< iterator, bool > emplace(Args &&...); + template<class... Args> iterator emplace_hint(const_iterator, Args &&...); template<class... Args> - std::pair< iterator, bool > try_emplace(const key_type &, Args &&...); + std::pair< iterator, bool > try_emplace(const key_type &, Args &&...); template<class... Args> - iterator try_emplace(const_iterator, const key_type &, Args &&...); + iterator try_emplace(const_iterator, const key_type &, Args &&...); template<class... Args> - std::pair< iterator, bool > try_emplace(key_type &&, Args &&...); + std::pair< iterator, bool > try_emplace(key_type &&, Args &&...); template<class... Args> - iterator try_emplace(const_iterator, key_type &&, Args &&...); - iterator erase(const_iterator) noexcept; - size_type erase(const key_type &) noexcept; - iterator erase(const_iterator, const_iterator) noexcept; - node_type extract(const key_type &); - node_type extract(const_iterator); - template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &); - template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &&); + iterator try_emplace(const_iterator, key_type &&, Args &&...); + iterator erase(const_iterator) noexcept; + size_type erase(const key_type &) noexcept; + iterator erase(const_iterator, const_iterator) noexcept; + node_type extract(const key_type &); + node_type extract(const_iterator); + template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &); + template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &&); template<typename C2> - void merge(multimap< Key, T, C2, Allocator, Options > &); + void merge(multimap< Key, T, C2, Allocator, Options > &); template<typename C2> - void merge(multimap< Key, T, C2, Allocator, Options > &&); - void swap(map &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); - key_compare key_comp() const; - value_compare value_comp() const; - iterator find(const key_type &); - const_iterator find(const key_type &) const; - size_type count(const key_type &) const; - iterator lower_bound(const key_type &); - const_iterator lower_bound(const key_type &) const; - iterator upper_bound(const key_type &); - const_iterator upper_bound(const key_type &) const; - std::pair< iterator, iterator > equal_range(const key_type &); + void merge(multimap< Key, T, C2, Allocator, Options > &&); + void swap(map &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); + key_compare key_comp() const; + value_compare value_comp() const; + iterator find(const key_type &); + const_iterator find(const key_type &) const; + size_type count(const key_type &) const; + iterator lower_bound(const key_type &); + const_iterator lower_bound(const key_type &) const; + iterator upper_bound(const key_type &); + const_iterator upper_bound(const key_type &) const; + std::pair< iterator, iterator > equal_range(const key_type &); std::pair< const_iterator, const_iterator > - equal_range(const key_type &) const; - void rebalance(); + equal_range(const key_type &) const; + void rebalance(); - // friend functions - friend bool operator==(const map &, const map &); - friend bool operator!=(const map &, const map &); - friend bool operator<(const map &, const map &); - friend bool operator>(const map &, const map &); - friend bool operator<=(const map &, const map &); - friend bool operator>=(const map &, const map &); - friend void swap(map &, map &); + // friend functions + friend bool operator==(const map &, const map &); + friend bool operator!=(const map &, const map &); + friend bool operator<(const map &, const map &); + friend bool operator>(const map &, const map &); + friend bool operator<=(const map &, const map &); + friend bool operator>=(const map &, const map &); + friend void swap(map &, map &); };
          -

          Description

          +

          Description

          A map is a kind of associative container that supports unique keys (contains at most one of each key value) and provides for fast retrieval of values of another type T based on the keys. The map class supports bidirectional iterators.

          A map satisfies all of the requirements of a container and of a reversible container and of an associative container. The value_type stored by this container is the value_type is std::pair<const Key, T>.

          -

          Template Parameters

          +

          Template Parameters

          1. typename Key
            @@ -221,58 +221,58 @@
          -

          +

          map public construct/copy/destruct

          1. -
            map() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
            +
            map() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

            Effects: Default constructs an empty map.

            Complexity: Constant.

          2. -
            map(const Compare & comp, const allocator_type & a);
            +
            map(const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty map using the specified comparison object and allocator.

            Complexity: Constant.

          3. -
            explicit map(const Compare & comp);
            +
            explicit map(const Compare & comp);

            Effects: Constructs an empty map using the specified comparison object.

            Complexity: Constant.

          4. -
            explicit map(const allocator_type & a);
            +
            explicit map(const allocator_type & a);

            Effects: Constructs an empty map using the specified allocator.

            Complexity: Constant.

          5. -
            template<typename InputIterator> map(InputIterator first, InputIterator last);
            +
            template<typename InputIterator> map(InputIterator first, InputIterator last);

            Effects: Constructs an empty map and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          6. template<typename InputIterator> 
            -  map(InputIterator first, InputIterator last, const allocator_type & a);
            + map(InputIterator first, InputIterator last, const allocator_type & a);

            Effects: Constructs an empty map using the specified allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          7. template<typename InputIterator> 
            -  map(InputIterator first, InputIterator last, const Compare & comp);
            + map(InputIterator first, InputIterator last, const Compare & comp);

            Effects: Constructs an empty map using the specified comparison object and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          8. template<typename InputIterator> 
            -  map(InputIterator first, InputIterator last, const Compare & comp, 
            +  map(InputIterator first, InputIterator last, const Compare & comp, 
                   const allocator_type & a);

            Effects: Constructs an empty map using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          9. template<typename InputIterator> 
            -  map(ordered_unique_range_t, InputIterator first, InputIterator last);
            + map(ordered_unique_range_t, InputIterator first, InputIterator last);

            Effects: Constructs an empty map and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate and must be unique values.

            Complexity: Linear in N.

            @@ -280,7 +280,7 @@
          10. template<typename InputIterator> 
            -  map(ordered_unique_range_t, InputIterator first, InputIterator last, 
            +  map(ordered_unique_range_t, InputIterator first, InputIterator last, 
                   const Compare & comp);

            Effects: Constructs an empty map using the specified comparison object and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate and must be unique values.

            @@ -289,7 +289,7 @@
          11. template<typename InputIterator> 
            -  map(ordered_unique_range_t, InputIterator first, InputIterator last, 
            +  map(ordered_unique_range_t, InputIterator first, InputIterator last, 
                   const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty map using the specified comparison object and allocator, and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate and must be unique values.

            @@ -297,35 +297,35 @@

            Note: Non-standard extension.

          12. -
            map(std::initializer_list< value_type > il);
            +
            map(std::initializer_list< value_type > il);

            Effects: Constructs an empty map and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted according to the predicate and otherwise N logN, where N is il.first() - il.end().

          13. -
            map(std::initializer_list< value_type > il, const Compare & comp);
            +
            map(std::initializer_list< value_type > il, const Compare & comp);

            Effects: Constructs an empty map using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          14. -
            map(std::initializer_list< value_type > il, const allocator_type & a);
            +
            map(std::initializer_list< value_type > il, const allocator_type & a);

            Effects: Constructs an empty map using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          15. -
            map(std::initializer_list< value_type > il, const Compare & comp, 
            +
            map(std::initializer_list< value_type > il, const Compare & comp, 
                 const allocator_type & a);

            Effects: Constructs an empty map using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          16. -
            map(ordered_unique_range_t, std::initializer_list< value_type > il);
            +
            map(ordered_unique_range_t, std::initializer_list< value_type > il);

            Effects: Constructs an empty map and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            Complexity: Linear in N.

            Note: Non-standard extension.

          17. -
            map(ordered_unique_range_t, std::initializer_list< value_type > il, 
            +
            map(ordered_unique_range_t, std::initializer_list< value_type > il, 
                 const Compare & comp);

            Effects: Constructs an empty map using the specified comparison object, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            @@ -333,7 +333,7 @@

            Note: Non-standard extension.

          18. -
            map(ordered_unique_range_t, std::initializer_list< value_type > il, 
            +
            map(ordered_unique_range_t, std::initializer_list< value_type > il, 
                 const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty map using the specified comparison object and allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            @@ -341,173 +341,173 @@

            Note: Non-standard extension.

          19. -
            map(const map & x);
            +
            map(const map & x);

            Effects: Copy constructs a map.

            Complexity: Linear in x.size().

          20. -
            map(map && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
            +
            map(map && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

            Effects: Move constructs a map. Constructs *this using x's resources.

            Complexity: Constant.

            Postcondition: x is emptied.

          21. -
            map(const map & x, const allocator_type & a);
            +
            map(const map & x, const allocator_type & a);

            Effects: Copy constructs a map using the specified allocator.

            Complexity: Linear in x.size().

          22. -
            map(map && x, const allocator_type & a);
            +
            map(map && x, const allocator_type & a);

            Effects: Move constructs a map using the specified allocator. Constructs *this using x's resources.

            Complexity: Constant if x == x.get_allocator(), linear otherwise.

            Postcondition: x is emptied.

          23. -
            map & operator=(const map & x);
            +
            map & operator=(const map & x);

            Effects: Makes *this a copy of x.

            Complexity: Linear in x.size().

          24. -
            map & operator=(map && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
            +
            map & operator=(map && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

            Effects: this->swap(x.get()).

            Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

            Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

          25. -
            map & operator=(std::initializer_list< value_type > il);
            +
            map & operator=(std::initializer_list< value_type > il);

            Effects: Assign content of il to *this.

          -

          -map public member functions

          +

          +map public member functions

            -
          1.  BOOST_STATIC_ASSERT(unspecified);
          2. +
          3.  BOOST_STATIC_ASSERT(unspecified);
          4. -
            allocator_type get_allocator() const;
            +
            allocator_type get_allocator() const;

            Effects: Returns a copy of the allocator that was passed to the object's constructor.

            Complexity: Constant.

          5. -
            stored_allocator_type & get_stored_allocator() noexcept;
            +
            stored_allocator_type & get_stored_allocator() noexcept;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          6. -
            const stored_allocator_type & get_stored_allocator() const noexcept;
            +
            const stored_allocator_type & get_stored_allocator() const noexcept;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          7. -
            iterator begin() noexcept;
            +
            iterator begin() noexcept;

            Effects: Returns an iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          8. -
            const_iterator begin() const noexcept;
            +
            const_iterator begin() const noexcept;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          9. -
            const_iterator cbegin() const noexcept;
            +
            const_iterator cbegin() const noexcept;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          10. -
            iterator end() noexcept;
            +
            iterator end() noexcept;

            Effects: Returns an iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          11. -
            const_iterator end() const noexcept;
            +
            const_iterator end() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          12. -
            const_iterator cend() const noexcept;
            +
            const_iterator cend() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          13. -
            reverse_iterator rbegin() noexcept;
            +
            reverse_iterator rbegin() noexcept;

            Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          14. -
            const_reverse_iterator rbegin() const noexcept;
            +
            const_reverse_iterator rbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          15. -
            const_reverse_iterator crbegin() const noexcept;
            +
            const_reverse_iterator crbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          16. -
            reverse_iterator rend() noexcept;
            +
            reverse_iterator rend() noexcept;

            Effects: Returns a reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          17. -
            const_reverse_iterator rend() const noexcept;
            +
            const_reverse_iterator rend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          18. -
            const_reverse_iterator crend() const noexcept;
            +
            const_reverse_iterator crend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          19. -
            bool empty() const noexcept;
            +
            bool empty() const noexcept;

            Effects: Returns true if the container contains no elements.

            Throws: Nothing.

            Complexity: Constant.

          20. -
            size_type size() const noexcept;
            +
            size_type size() const noexcept;

            Effects: Returns the number of the elements contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          21. -
            size_type max_size() const noexcept;
            +
            size_type max_size() const noexcept;

            Effects: Returns the largest possible size of the container.

            Throws: Nothing.

            Complexity: Constant.

          22. -
            mapped_type & operator[](const key_type & k);
            +
            mapped_type & operator[](const key_type & k);

            Effects: If there is no key equivalent to x in the map, inserts value_type(x, T()) into the map.

            Returns: A reference to the mapped_type corresponding to x in *this.

            Complexity: Logarithmic.

          23. -
            mapped_type & operator[](key_type && k);
            +
            mapped_type & operator[](key_type && k);

            Effects: If there is no key equivalent to x in the map, inserts value_type(boost::move(x), T()) into the map (the key is move-constructed)

            Returns: A reference to the mapped_type corresponding to x in *this.

            Complexity: Logarithmic.

          24. template<typename M> 
            -  std::pair< iterator, bool > insert_or_assign(const key_type & k, M && obj);
            + std::pair< iterator, bool > insert_or_assign(const key_type & k, M && obj);

            Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, forward<M>(obj)).

            No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

            Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

            @@ -515,7 +515,7 @@
          25. template<typename M> 
            -  std::pair< iterator, bool > insert_or_assign(key_type && k, M && obj);
            + std::pair< iterator, bool > insert_or_assign(key_type && k, M && obj);

            Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, move(obj)).

            No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

            Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

            @@ -523,7 +523,7 @@
          26. template<typename M> 
            -  iterator insert_or_assign(const_iterator hint, const key_type & k, M && obj);
            + iterator insert_or_assign(const_iterator hint, const key_type & k, M && obj);

            Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, forward<M>(obj)) and the new element to the container as close as possible to the position just before hint.

            No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

            Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

            @@ -531,120 +531,120 @@
          27. template<typename M> 
            -  iterator insert_or_assign(const_iterator hint, key_type && k, M && obj);
            + iterator insert_or_assign(const_iterator hint, key_type && k, M && obj);

            Effects: If a key equivalent to k already exists in the container, assigns forward<M>(obj) to the mapped_type corresponding to the key k. If the key does not exist, inserts the new value as if by insert, constructing it from value_type(k, move(obj)) and the new element to the container as close as possible to the position just before hint.

            No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.

            Returns: The bool component is true if the insertion took place and false if the assignment took place. The iterator component is pointing at the element that was inserted or updated.

            Complexity: Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before hint.

          28. -
            T & at(const key_type & k);
            +
            T & at(const key_type & k);

            Returns: A reference to the element whose key is equivalent to x. Throws: An exception object of type out_of_range if no such element is present. Complexity: logarithmic.

          29. -
            const T & at(const key_type & k) const;
            +
            const T & at(const key_type & k) const;

            Returns: A reference to the element whose key is equivalent to x. Throws: An exception object of type out_of_range if no such element is present. Complexity: logarithmic.

          30. -
            std::pair< iterator, bool > insert(const value_type & x);
            +
            std::pair< iterator, bool > insert(const value_type & x);

            Effects: Inserts x if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          31. -
            std::pair< iterator, bool > insert(const nonconst_value_type & x);
            +
            std::pair< iterator, bool > insert(const nonconst_value_type & x);

            Effects: Inserts a new value_type created from the pair if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          32. -
            std::pair< iterator, bool > insert(nonconst_value_type && x);
            +
            std::pair< iterator, bool > insert(nonconst_value_type && x);

            Effects: Inserts a new value_type move constructed from the pair if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          33. -
            std::pair< iterator, bool > insert(movable_value_type && x);
            +
            std::pair< iterator, bool > insert(movable_value_type && x);

            Effects: Inserts a new value_type move constructed from the pair if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          34. -
            std::pair< iterator, bool > insert(value_type && x);
            +
            std::pair< iterator, bool > insert(value_type && x);

            Effects: Move constructs a new value from x if and only if there is no element in the container with key equivalent to the key of x.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          35. -
            iterator insert(const_iterator p, const value_type & x);
            +
            iterator insert(const_iterator p, const value_type & x);

            Effects: Inserts a copy of x in the container if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          36. -
            iterator insert(const_iterator p, nonconst_value_type && x);
            +
            iterator insert(const_iterator p, nonconst_value_type && x);

            Effects: Move constructs a new value from x if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          37. -
            iterator insert(const_iterator p, movable_value_type && x);
            +
            iterator insert(const_iterator p, movable_value_type && x);

            Effects: Move constructs a new value from x if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          38. -
            iterator insert(const_iterator p, const nonconst_value_type & x);
            +
            iterator insert(const_iterator p, const nonconst_value_type & x);

            Effects: Inserts a copy of x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          39. -
            iterator insert(const_iterator p, value_type && x);
            +
            iterator insert(const_iterator p, value_type && x);

            Effects: Inserts an element move constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic.

          40. template<typename InputIterator> 
            -  void insert(InputIterator first, InputIterator last);
            + void insert(InputIterator first, InputIterator last);

            Requires: first, last are not iterators into *this.

            Effects: inserts each element from the range [first,last) if and only if there is no element with key equivalent to the key of that element.

            Complexity: At most N log(size()+N) (N is the distance from first to last)

          41. -
            void insert(std::initializer_list< value_type > il);
            +
            void insert(std::initializer_list< value_type > il);

            Effects: inserts each element from the range [il.begin(), il.end()) if and only if there is no element with key equivalent to the key of that element.

            Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end())

          42. -
            insert_return_type insert(node_type && nh);
            +
            insert_return_type insert(node_type && nh);

            Requires: nh is empty or this->get_allocator() == nh.get_allocator().

            Effects: If nh is empty, has no effect. Otherwise, inserts the element owned by nh if and only if there is no element in the container with a key equivalent to nh.key().

            Returns: If nh is empty, insert_return_type.inserted is false, insert_return_type.position is end(), and insert_return_type.node is empty. Otherwise if the insertion took place, insert_return_type.inserted is true, insert_return_type.position points to the inserted element, and insert_return_type.node is empty; if the insertion failed, insert_return_type.inserted is false, insert_return_type.node has the previous value of nh, and insert_return_type.position points to an element with a key equivalent to nh.key().

            Complexity: Logarithmic

          43. -
            insert_return_type insert(const_iterator hint, node_type && nh);
            +
            insert_return_type insert(const_iterator hint, node_type && nh);

            Effects: Same as insert(node_type && nh) but the element is inserted as close as possible to the position just prior to "hint".

            Complexity: logarithmic in general, but amortized constant if the element is inserted right before "hint".

          44. -
            template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);
            +
            template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);

            Effects: Inserts an object x of type T constructed with std::forward<Args>(args)... in the container if and only if there is no element in the container with an equivalent key. p is a hint pointing to where the insert should start to search.

            Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          45. template<class... Args> 
            -  iterator emplace_hint(const_iterator p, Args &&... args);
            + iterator emplace_hint(const_iterator p, Args &&... args);

            Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the container if and only if there is no element in the container with an equivalent key. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          46. template<class... Args> 
            -  std::pair< iterator, bool > try_emplace(const key_type & k, Args &&... args);
            + std::pair< iterator, bool > try_emplace(const key_type & k, Args &&... args);

            Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

            Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

            Returns: The bool component of the returned pair is true if and only if the insertion took place. The returned iterator points to the map element whose key is equivalent to k.

            @@ -652,7 +652,7 @@
          47. template<class... Args> 
            -  iterator try_emplace(const_iterator hint, const key_type & k, 
            +  iterator try_emplace(const_iterator hint, const key_type & k, 
                                    Args &&... args);

            Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

            Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(k), forward_as_tuple(forward<Args>(args)...).

            @@ -661,7 +661,7 @@
          48. template<class... Args> 
            -  std::pair< iterator, bool > try_emplace(key_type && k, Args &&... args);
            + std::pair< iterator, bool > try_emplace(key_type && k, Args &&... args);

            Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

            Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

            Returns: The bool component of the returned pair is true if and only if the insertion took place. The returned iterator points to the map element whose key is equivalent to k.

            @@ -669,45 +669,45 @@
          49. template<class... Args> 
            -  iterator try_emplace(const_iterator hint, key_type && k, Args &&... args);
            + iterator try_emplace(const_iterator hint, key_type && k, Args &&... args);

            Requires: value_type shall be EmplaceConstructible into map from piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

            Effects: If the map already contains an element whose key is equivalent to k, there is no effect. Otherwise inserts an object of type value_type constructed with piecewise_construct, forward_as_tuple(move(k)), forward_as_tuple(forward<Args>(args)...).

            Returns: The returned iterator points to the map element whose key is equivalent to k.

            Complexity: Logarithmic in general, but amortized constant if value is inserted right before p.

          50. -
            iterator erase(const_iterator p) noexcept;
            +
            iterator erase(const_iterator p) noexcept;

            Effects: Erases the element pointed to by p.

            Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

            Complexity: Amortized constant time

          51. -
            size_type erase(const key_type & x) noexcept;
            +
            size_type erase(const key_type & x) noexcept;

            Effects: Erases all elements in the container with key equivalent to x.

            Returns: Returns the number of erased elements.

            Complexity: log(size()) + count(k)

          52. -
            iterator erase(const_iterator first, const_iterator last) noexcept;
            +
            iterator erase(const_iterator first, const_iterator last) noexcept;

            Effects: Erases all the elements in the range [first, last).

            Returns: Returns last.

            Complexity: log(size())+N where N is the distance from first to last.

          53. -
            node_type extract(const key_type & k);
            +
            node_type extract(const key_type & k);

            Effects: Removes the first element in the container with key equivalent to k.

            Returns: A node_type owning the element if found, otherwise an empty node_type.

            Complexity: log(a.size()).

          54. -
            node_type extract(const_iterator position);
            +
            node_type extract(const_iterator position);

            Effects: Removes the element pointed to by "position".

            Returns: A node_type owning the element, otherwise an empty node_type.

            Complexity: Amortized constant.

          55. template<typename C2> 
            -  void merge(map< Key, T, C2, Allocator, Options > & source);
            + void merge(map< Key, T, C2, Allocator, Options > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -716,7 +716,7 @@
          56. template<typename C2> 
            -  void merge(map< Key, T, C2, Allocator, Options > && source);
            + void merge(map< Key, T, C2, Allocator, Options > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -725,7 +725,7 @@
          57. template<typename C2> 
            -  void merge(multimap< Key, T, C2, Allocator, Options > & source);
            + void merge(multimap< Key, T, C2, Allocator, Options > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -734,7 +734,7 @@
          58. template<typename C2> 
            -  void merge(multimap< Key, T, C2, Allocator, Options > && source);
            + void merge(multimap< Key, T, C2, Allocator, Options > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -742,7 +742,7 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          59. -
            void swap(map & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
            +
            void swap(map & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

            Effects: Swaps the contents of *this and x.

            Throws: Nothing.

            Complexity: Constant. Effects: erase(a.begin(),a.end()).

            @@ -750,104 +750,104 @@

            Complexity: linear in size().

          60. -
            key_compare key_comp() const;
            +
            key_compare key_comp() const;

            Effects: Returns the comparison object out of which a was constructed.

            Complexity: Constant.

          61. -
            value_compare value_comp() const;
            +
            value_compare value_comp() const;

            Effects: Returns an object of value_compare constructed out of the comparison object.

            Complexity: Constant.

          62. -
            iterator find(const key_type & x);
            +
            iterator find(const key_type & x);

            Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          63. -
            const_iterator find(const key_type & x) const;
            +
            const_iterator find(const key_type & x) const;

            Returns: A const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          64. -
            size_type count(const key_type & x) const;
            +
            size_type count(const key_type & x) const;

            Returns: The number of elements with key equivalent to x.

            Complexity: log(size())+count(k)

          65. -
            iterator lower_bound(const key_type & x);
            +
            iterator lower_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          66. -
            const_iterator lower_bound(const key_type & x) const;
            +
            const_iterator lower_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          67. -
            iterator upper_bound(const key_type & x);
            +
            iterator upper_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          68. -
            const_iterator upper_bound(const key_type & x) const;
            +
            const_iterator upper_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          69. -
            std::pair< iterator, iterator > equal_range(const key_type & x);
            +
            std::pair< iterator, iterator > equal_range(const key_type & x);

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          70. std::pair< const_iterator, const_iterator > 
            -equal_range(const key_type & x) const;
            +equal_range(const key_type & x) const;

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          71. -
            void rebalance();
            +
            void rebalance();

            Effects: Rebalances the tree. It's a no-op for Red-Black and AVL trees.

            Complexity: Linear

          -

          -map friend functions

          +

          +map friend functions

          1. -
            friend bool operator==(const map & x, const map & y);
            +
            friend bool operator==(const map & x, const map & y);

            Effects: Returns true if x and y are equal

            Complexity: Linear to the number of elements in the container.

          2. -
            friend bool operator!=(const map & x, const map & y);
            +
            friend bool operator!=(const map & x, const map & y);

            Effects: Returns true if x and y are unequal

            Complexity: Linear to the number of elements in the container.

          3. -
            friend bool operator<(const map & x, const map & y);
            +
            friend bool operator<(const map & x, const map & y);

            Effects: Returns true if x is less than y

            Complexity: Linear to the number of elements in the container.

          4. -
            friend bool operator>(const map & x, const map & y);
            +
            friend bool operator>(const map & x, const map & y);

            Effects: Returns true if x is greater than y

            Complexity: Linear to the number of elements in the container.

          5. -
            friend bool operator<=(const map & x, const map & y);
            +
            friend bool operator<=(const map & x, const map & y);

            Effects: Returns true if x is equal or less than y

            Complexity: Linear to the number of elements in the container.

          6. -
            friend bool operator>=(const map & x, const map & y);
            +
            friend bool operator>=(const map & x, const map & y);

            Effects: Returns true if x is equal or greater than y

            Complexity: Linear to the number of elements in the container.

          7. -
            friend void swap(map & x, map & y);
            +
            friend void swap(map & x, map & y);

            Effects: x.swap(y)

            Complexity: Constant.

          8. diff --git a/doc/html/boost/container/multimap.html b/doc/html/boost/container/multimap.html index aabad04058..c47300e98f 100644 --- a/doc/html/boost/container/multimap.html +++ b/doc/html/boost/container/multimap.html @@ -60,121 +60,121 @@ typedef implementation_defined node_type; // construct/copy/destruct - multimap() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); - explicit multimap(const allocator_type &); - explicit multimap(const Compare &); - multimap(const Compare &, const allocator_type &); - template<typename InputIterator> multimap(InputIterator, InputIterator); + multimap() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); + explicit multimap(const allocator_type &); + explicit multimap(const Compare &); + multimap(const Compare &, const allocator_type &); + template<typename InputIterator> multimap(InputIterator, InputIterator); template<typename InputIterator> - multimap(InputIterator, InputIterator, const allocator_type &); + multimap(InputIterator, InputIterator, const allocator_type &); template<typename InputIterator> - multimap(InputIterator, InputIterator, const Compare &); + multimap(InputIterator, InputIterator, const Compare &); template<typename InputIterator> - multimap(InputIterator, InputIterator, const Compare &, + multimap(InputIterator, InputIterator, const Compare &, const allocator_type &); template<typename InputIterator> - multimap(ordered_range_t, InputIterator, InputIterator); + multimap(ordered_range_t, InputIterator, InputIterator); template<typename InputIterator> - multimap(ordered_range_t, InputIterator, InputIterator, const Compare &); + multimap(ordered_range_t, InputIterator, InputIterator, const Compare &); template<typename InputIterator> - multimap(ordered_range_t, InputIterator, InputIterator, const Compare &, + multimap(ordered_range_t, InputIterator, InputIterator, const Compare &, const allocator_type &); - multimap(std::initializer_list< value_type >); - multimap(std::initializer_list< value_type >, const allocator_type &); - multimap(std::initializer_list< value_type >, const Compare &); - multimap(std::initializer_list< value_type >, const Compare &, + multimap(std::initializer_list< value_type >); + multimap(std::initializer_list< value_type >, const allocator_type &); + multimap(std::initializer_list< value_type >, const Compare &); + multimap(std::initializer_list< value_type >, const Compare &, const allocator_type &); - multimap(ordered_range_t, std::initializer_list< value_type >); - multimap(ordered_range_t, std::initializer_list< value_type >, + multimap(ordered_range_t, std::initializer_list< value_type >); + multimap(ordered_range_t, std::initializer_list< value_type >, const Compare &); - multimap(ordered_range_t, std::initializer_list< value_type >, + multimap(ordered_range_t, std::initializer_list< value_type >, const Compare &, const allocator_type &); - multimap(const multimap &); - multimap(multimap &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); - multimap(const multimap &, const allocator_type &); - multimap(multimap &&, const allocator_type &); - multimap & operator=(const multimap &); - multimap & operator=(multimap &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); - multimap & operator=(std::initializer_list< value_type >); + multimap(const multimap &); + multimap(multimap &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); + multimap(const multimap &, const allocator_type &); + multimap(multimap &&, const allocator_type &); + multimap & operator=(const multimap &); + multimap & operator=(multimap &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); + multimap & operator=(std::initializer_list< value_type >); - // public member functions - BOOST_STATIC_ASSERT(unspecified); - allocator_type get_allocator() const; - stored_allocator_type & get_stored_allocator(); - const stored_allocator_type & get_stored_allocator() const; - iterator begin(); - const_iterator begin() const; - const_iterator cbegin() const; - iterator end() noexcept; - const_iterator end() const noexcept; - const_iterator cend() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - const_reverse_iterator crbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const; - size_type size() const; - size_type max_size() const; - template<class... Args> iterator emplace(Args &&...); - template<class... Args> iterator emplace_hint(const_iterator, Args &&...); - iterator insert(const value_type &); - iterator insert(const nonconst_value_type &); - iterator insert(nonconst_value_type &&); - iterator insert(movable_value_type &&); - iterator insert(const_iterator, const value_type &); - iterator insert(const_iterator, const nonconst_value_type &); - iterator insert(const_iterator, nonconst_value_type &&); - iterator insert(const_iterator, movable_value_type &&); - template<typename InputIterator> void insert(InputIterator, InputIterator); - void insert(std::initializer_list< value_type >); - iterator insert(node_type &&); - iterator insert(const_iterator, node_type &&); - iterator erase(const_iterator); - size_type erase(const key_type &); - iterator erase(const_iterator, const_iterator); - node_type extract(const key_type &); - node_type extract(const_iterator); + // public member functions + BOOST_STATIC_ASSERT(unspecified); + allocator_type get_allocator() const; + stored_allocator_type & get_stored_allocator(); + const stored_allocator_type & get_stored_allocator() const; + iterator begin(); + const_iterator begin() const; + const_iterator cbegin() const; + iterator end() noexcept; + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator crbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const; + size_type size() const; + size_type max_size() const; + template<class... Args> iterator emplace(Args &&...); + template<class... Args> iterator emplace_hint(const_iterator, Args &&...); + iterator insert(const value_type &); + iterator insert(const nonconst_value_type &); + iterator insert(nonconst_value_type &&); + iterator insert(movable_value_type &&); + iterator insert(const_iterator, const value_type &); + iterator insert(const_iterator, const nonconst_value_type &); + iterator insert(const_iterator, nonconst_value_type &&); + iterator insert(const_iterator, movable_value_type &&); + template<typename InputIterator> void insert(InputIterator, InputIterator); + void insert(std::initializer_list< value_type >); + iterator insert(node_type &&); + iterator insert(const_iterator, node_type &&); + iterator erase(const_iterator); + size_type erase(const key_type &); + iterator erase(const_iterator, const_iterator); + node_type extract(const key_type &); + node_type extract(const_iterator); template<typename C2> - void merge(multimap< Key, T, C2, Allocator, Options > &); + void merge(multimap< Key, T, C2, Allocator, Options > &); template<typename C2> - void merge(multimap< Key, T, C2, Allocator, Options > &&); - template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &); - template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &&); - void swap(multiset &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); - void clear() noexcept; - key_compare key_comp() const; - value_compare value_comp() const; - iterator find(const key_type &); - const_iterator find(const key_type &) const; - size_type count(const key_type &) const; - iterator lower_bound(const key_type &); - const_iterator lower_bound(const key_type &) const; - iterator upper_bound(const key_type &); - const_iterator upper_bound(const key_type &) const; - std::pair< iterator, iterator > equal_range(const key_type &); + void merge(multimap< Key, T, C2, Allocator, Options > &&); + template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &); + template<typename C2> void merge(map< Key, T, C2, Allocator, Options > &&); + void swap(multiset &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); + void clear() noexcept; + key_compare key_comp() const; + value_compare value_comp() const; + iterator find(const key_type &); + const_iterator find(const key_type &) const; + size_type count(const key_type &) const; + iterator lower_bound(const key_type &); + const_iterator lower_bound(const key_type &) const; + iterator upper_bound(const key_type &); + const_iterator upper_bound(const key_type &) const; + std::pair< iterator, iterator > equal_range(const key_type &); std::pair< const_iterator, const_iterator > - equal_range(const key_type &) const; - void rebalance(); + equal_range(const key_type &) const; + void rebalance(); - // friend functions - friend bool operator==(const multimap &, const multimap &); - friend bool operator!=(const multimap &, const multimap &); - friend bool operator<(const multimap &, const multimap &); - friend bool operator>(const multimap &, const multimap &); - friend bool operator<=(const multimap &, const multimap &); - friend bool operator>=(const multimap &, const multimap &); - friend void swap(multimap &, multimap &); + // friend functions + friend bool operator==(const multimap &, const multimap &); + friend bool operator!=(const multimap &, const multimap &); + friend bool operator<(const multimap &, const multimap &); + friend bool operator>(const multimap &, const multimap &); + friend bool operator<=(const multimap &, const multimap &); + friend bool operator>=(const multimap &, const multimap &); + friend void swap(multimap &, multimap &); };
          -

          Description

          +

          Description

          A multimap is a kind of associative container that supports equivalent keys (possibly containing multiple copies of the same key value) and provides for fast retrieval of values of another type T based on the keys. The multimap class supports bidirectional iterators.

          A multimap satisfies all of the requirements of a container and of a reversible container and of an associative container. The value_type stored by this container is the value_type is std::pair<const Key, T>.

          -

          Template Parameters

          +

          Template Parameters

          1. typename Key
            @@ -196,59 +196,59 @@
          -

          +

          multimap public construct/copy/destruct

          1. -
            multimap() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
            +
            multimap() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

            Effects: Default constructs an empty multimap.

            Complexity: Constant.

          2. -
            explicit multimap(const allocator_type & a);
            +
            explicit multimap(const allocator_type & a);

            Effects: Constructs an empty multimap using the specified allocator object and allocator.

            Complexity: Constant.

          3. -
            explicit multimap(const Compare & comp);
            +
            explicit multimap(const Compare & comp);

            Effects: Constructs an empty multimap using the specified comparison.

            Complexity: Constant.

          4. -
            multimap(const Compare & comp, const allocator_type & a);
            +
            multimap(const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty multimap using the specified comparison and allocator.

            Complexity: Constant.

          5. template<typename InputIterator> 
            -  multimap(InputIterator first, InputIterator last);
            + multimap(InputIterator first, InputIterator last);

            Effects: Constructs an empty multimap and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          6. template<typename InputIterator> 
            -  multimap(InputIterator first, InputIterator last, const allocator_type & a);
            + multimap(InputIterator first, InputIterator last, const allocator_type & a);

            Effects: Constructs an empty multimap using the specified allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          7. template<typename InputIterator> 
            -  multimap(InputIterator first, InputIterator last, const Compare & comp);
            + multimap(InputIterator first, InputIterator last, const Compare & comp);

            Effects: Constructs an empty multimap using the specified comparison object and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          8. template<typename InputIterator> 
            -  multimap(InputIterator first, InputIterator last, const Compare & comp, 
            +  multimap(InputIterator first, InputIterator last, const Compare & comp, 
                        const allocator_type & a);

            Effects: Constructs an empty multimap using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          9. template<typename InputIterator> 
            -  multimap(ordered_range_t, InputIterator first, InputIterator last);
            + multimap(ordered_range_t, InputIterator first, InputIterator last);

            Effects: Constructs an empty multimap and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate.

            Complexity: Linear in N.

            @@ -256,7 +256,7 @@
          10. template<typename InputIterator> 
            -  multimap(ordered_range_t, InputIterator first, InputIterator last, 
            +  multimap(ordered_range_t, InputIterator first, InputIterator last, 
                        const Compare & comp);

            Effects: Constructs an empty multimap using the specified comparison object and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate.

            @@ -265,7 +265,7 @@
          11. template<typename InputIterator> 
            -  multimap(ordered_range_t, InputIterator first, InputIterator last, 
            +  multimap(ordered_range_t, InputIterator first, InputIterator last, 
                        const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty multimap using the specified comparison object and allocator, and inserts elements from the ordered range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate.

            @@ -273,35 +273,35 @@

            Note: Non-standard extension.

          12. -
            multimap(std::initializer_list< value_type > il);
            +
            multimap(std::initializer_list< value_type > il);

            Effects: Constructs an empty multimap and and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          13. -
            multimap(std::initializer_list< value_type > il, const allocator_type & a);
            +
            multimap(std::initializer_list< value_type > il, const allocator_type & a);

            Effects: Constructs an empty multimap using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          14. -
            multimap(std::initializer_list< value_type > il, const Compare & comp);
            +
            multimap(std::initializer_list< value_type > il, const Compare & comp);

            Effects: Constructs an empty multimap using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          15. -
            multimap(std::initializer_list< value_type > il, const Compare & comp, 
            +
            multimap(std::initializer_list< value_type > il, const Compare & comp, 
                      const allocator_type & a);

            Effects: Constructs an empty multimap using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is il.first() - il.end().

          16. -
            multimap(ordered_range_t, std::initializer_list< value_type > il);
            +
            multimap(ordered_range_t, std::initializer_list< value_type > il);

            Effects: Constructs an empty map and inserts elements from the ordered range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate.

            Complexity: Linear in N.

            Note: Non-standard extension.

          17. -
            multimap(ordered_range_t, std::initializer_list< value_type > il, 
            +
            multimap(ordered_range_t, std::initializer_list< value_type > il, 
                      const Compare & comp);

            Effects: Constructs an empty map using the specified comparison object and inserts elements from the ordered range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate.

            @@ -309,7 +309,7 @@

            Note: Non-standard extension.

          18. -
            multimap(ordered_range_t, std::initializer_list< value_type > il, 
            +
            multimap(ordered_range_t, std::initializer_list< value_type > il, 
                      const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty map and inserts elements from the ordered range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate.

            @@ -317,269 +317,269 @@

            Note: Non-standard extension.

          19. -
            multimap(const multimap & x);
            +
            multimap(const multimap & x);

            Effects: Copy constructs a multimap.

            Complexity: Linear in x.size().

          20. -
            multimap(multimap && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
            +
            multimap(multimap && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

            Effects: Move constructs a multimap. Constructs *this using x's resources.

            Complexity: Constant.

            Postcondition: x is emptied.

          21. -
            multimap(const multimap & x, const allocator_type & a);
            +
            multimap(const multimap & x, const allocator_type & a);

            Effects: Copy constructs a multimap.

            Complexity: Linear in x.size().

          22. -
            multimap(multimap && x, const allocator_type & a);
            +
            multimap(multimap && x, const allocator_type & a);

            Effects: Move constructs a multimap using the specified allocator. Constructs *this using x's resources. Complexity: Constant if a == x.get_allocator(), linear otherwise.

            Postcondition: x is emptied.

          23. -
            multimap & operator=(const multimap & x);
            +
            multimap & operator=(const multimap & x);

            Effects: Makes *this a copy of x.

            Complexity: Linear in x.size().

          24. -
            multimap & operator=(multimap && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
            +
            multimap & operator=(multimap && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

            Effects: this->swap(x.get()).

            Complexity: Constant.

          25. -
            multimap & operator=(std::initializer_list< value_type > il);
            +
            multimap & operator=(std::initializer_list< value_type > il);

            Effects: Assign content of il to *this.

          -

          -multimap public member functions

          +

          +multimap public member functions

            -
          1.  BOOST_STATIC_ASSERT(unspecified);
          2. +
          3.  BOOST_STATIC_ASSERT(unspecified);
          4. -
            allocator_type get_allocator() const;
            +
            allocator_type get_allocator() const;

            Effects: Returns a copy of the allocator that was passed to the object's constructor.

            Complexity: Constant.

          5. -
            stored_allocator_type & get_stored_allocator();
            +
            stored_allocator_type & get_stored_allocator();

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          6. -
            const stored_allocator_type & get_stored_allocator() const;
            +
            const stored_allocator_type & get_stored_allocator() const;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          7. -
            iterator begin();
            +
            iterator begin();

            Effects: Returns an iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant

          8. -
            const_iterator begin() const;
            +
            const_iterator begin() const;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          9. -
            const_iterator cbegin() const;
            +
            const_iterator cbegin() const;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          10. -
            iterator end() noexcept;
            +
            iterator end() noexcept;

            Effects: Returns an iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          11. -
            const_iterator end() const noexcept;
            +
            const_iterator end() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          12. -
            const_iterator cend() const noexcept;
            +
            const_iterator cend() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          13. -
            reverse_iterator rbegin() noexcept;
            +
            reverse_iterator rbegin() noexcept;

            Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          14. -
            const_reverse_iterator rbegin() const noexcept;
            +
            const_reverse_iterator rbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          15. -
            const_reverse_iterator crbegin() const noexcept;
            +
            const_reverse_iterator crbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          16. -
            reverse_iterator rend() noexcept;
            +
            reverse_iterator rend() noexcept;

            Effects: Returns a reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          17. -
            const_reverse_iterator rend() const noexcept;
            +
            const_reverse_iterator rend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          18. -
            const_reverse_iterator crend() const noexcept;
            +
            const_reverse_iterator crend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          19. -
            bool empty() const;
            +
            bool empty() const;

            Effects: Returns true if the container contains no elements.

            Throws: Nothing.

            Complexity: Constant.

          20. -
            size_type size() const;
            +
            size_type size() const;

            Effects: Returns the number of the elements contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          21. -
            size_type max_size() const;
            +
            size_type max_size() const;

            Effects: Returns the largest possible size of the container.

            Throws: Nothing.

            Complexity: Constant.

          22. -
            template<class... Args> iterator emplace(Args &&... args);
            +
            template<class... Args> iterator emplace(Args &&... args);

            Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          23. template<class... Args> 
            -  iterator emplace_hint(const_iterator p, Args &&... args);
            + iterator emplace_hint(const_iterator p, Args &&... args);

            Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          24. -
            iterator insert(const value_type & x);
            +
            iterator insert(const value_type & x);

            Effects: Inserts x and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          25. -
            iterator insert(const nonconst_value_type & x);
            +
            iterator insert(const nonconst_value_type & x);

            Effects: Inserts a new value constructed from x and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          26. -
            iterator insert(nonconst_value_type && x);
            +
            iterator insert(nonconst_value_type && x);

            Effects: Inserts a new value move-constructed from x and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          27. -
            iterator insert(movable_value_type && x);
            +
            iterator insert(movable_value_type && x);

            Effects: Inserts a new value move-constructed from x and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          28. -
            iterator insert(const_iterator p, const value_type & x);
            +
            iterator insert(const_iterator p, const value_type & x);

            Effects: Inserts a copy of x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          29. -
            iterator insert(const_iterator p, const nonconst_value_type & x);
            +
            iterator insert(const_iterator p, const nonconst_value_type & x);

            Effects: Inserts a new value constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          30. -
            iterator insert(const_iterator p, nonconst_value_type && x);
            +
            iterator insert(const_iterator p, nonconst_value_type && x);

            Effects: Inserts a new value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          31. -
            iterator insert(const_iterator p, movable_value_type && x);
            +
            iterator insert(const_iterator p, movable_value_type && x);

            Effects: Inserts a new value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          32. template<typename InputIterator> 
            -  void insert(InputIterator first, InputIterator last);
            + void insert(InputIterator first, InputIterator last);

            Requires: first, last are not iterators into *this.

            Effects: inserts each element from the range [first,last) .

            Complexity: At most N log(size()+N) (N is the distance from first to last)

          33. -
            void insert(std::initializer_list< value_type > il);
            +
            void insert(std::initializer_list< value_type > il);

            Effects: inserts each element from the range [il.begin(), il.end().

            Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end())

          34. -
            iterator insert(node_type && nh);
            +
            iterator insert(node_type && nh);

            Requires: nh is empty or this->get_allocator() == nh.get_allocator().

            Effects/Returns: If nh is empty, has no effect and returns end(). Otherwise, inserts the element owned by nh and returns an iterator pointing to the newly inserted element. If a range containing elements with keys equivalent to nh.key() exists, the element is inserted at the end of that range. nh is always emptied.

            Complexity: Logarithmic

          35. -
            iterator insert(const_iterator hint, node_type && nh);
            +
            iterator insert(const_iterator hint, node_type && nh);

            Effects: Same as insert(node_type && nh) but the element is inserted as close as possible to the position just prior to "hint".

            Complexity: logarithmic in general, but amortized constant if the element is inserted right before "hint".

          36. -
            iterator erase(const_iterator p);
            +
            iterator erase(const_iterator p);

            Effects: Erases the element pointed to by p.

            Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

            Complexity: Amortized constant time

          37. -
            size_type erase(const key_type & x);
            +
            size_type erase(const key_type & x);

            Effects: Erases all elements in the container with key equivalent to x.

            Returns: Returns the number of erased elements.

            Complexity: log(size()) + count(k)

          38. -
            iterator erase(const_iterator first, const_iterator last);
            +
            iterator erase(const_iterator first, const_iterator last);

            Effects: Erases all the elements in the range [first, last).

            Returns: Returns last.

            Complexity: log(size())+N where N is the distance from first to last.

          39. -
            node_type extract(const key_type & k);
            +
            node_type extract(const key_type & k);

            Effects: Removes the first element in the container with key equivalent to k.

            Returns: A node_type owning the element if found, otherwise an empty node_type.

            Complexity: log(a.size()).

          40. -
            node_type extract(const_iterator position);
            +
            node_type extract(const_iterator position);

            Effects: Removes the element pointed to by "position".

            Returns: A node_type owning the element, otherwise an empty node_type.

            Complexity: Amortized constant.

          41. template<typename C2> 
            -  void merge(multimap< Key, T, C2, Allocator, Options > & source);
            + void merge(multimap< Key, T, C2, Allocator, Options > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -588,7 +588,7 @@
          42. template<typename C2> 
            -  void merge(multimap< Key, T, C2, Allocator, Options > && source);
            + void merge(multimap< Key, T, C2, Allocator, Options > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -597,7 +597,7 @@
          43. template<typename C2> 
            -  void merge(map< Key, T, C2, Allocator, Options > & source);
            + void merge(map< Key, T, C2, Allocator, Options > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -606,7 +606,7 @@
          44. template<typename C2> 
            -  void merge(map< Key, T, C2, Allocator, Options > && source);
            + void merge(map< Key, T, C2, Allocator, Options > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -614,116 +614,116 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          45. -
            void swap(multiset & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
            +
            void swap(multiset & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

            Effects: Swaps the contents of *this and x.

            Throws: Nothing.

            Complexity: Constant.

          46. -
            void clear() noexcept;
            +
            void clear() noexcept;

            Effects: erase(a.begin(),a.end()).

            Postcondition: size() == 0.

            Complexity: linear in size().

          47. -
            key_compare key_comp() const;
            +
            key_compare key_comp() const;

            Effects: Returns the comparison object out of which a was constructed.

            Complexity: Constant.

          48. -
            value_compare value_comp() const;
            +
            value_compare value_comp() const;

            Effects: Returns an object of value_compare constructed out of the comparison object.

            Complexity: Constant.

          49. -
            iterator find(const key_type & x);
            +
            iterator find(const key_type & x);

            Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          50. -
            const_iterator find(const key_type & x) const;
            +
            const_iterator find(const key_type & x) const;

            Returns: A const iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          51. -
            size_type count(const key_type & x) const;
            +
            size_type count(const key_type & x) const;

            Returns: The number of elements with key equivalent to x.

            Complexity: log(size())+count(k)

          52. -
            iterator lower_bound(const key_type & x);
            +
            iterator lower_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          53. -
            const_iterator lower_bound(const key_type & x) const;
            +
            const_iterator lower_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          54. -
            iterator upper_bound(const key_type & x);
            +
            iterator upper_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          55. -
            const_iterator upper_bound(const key_type & x) const;
            +
            const_iterator upper_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          56. -
            std::pair< iterator, iterator > equal_range(const key_type & x);
            +
            std::pair< iterator, iterator > equal_range(const key_type & x);

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          57. std::pair< const_iterator, const_iterator > 
            -equal_range(const key_type & x) const;
            +equal_range(const key_type & x) const;

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          58. -
            void rebalance();
            +
            void rebalance();

            Effects: Rebalances the tree. It's a no-op for Red-Black and AVL trees.

            Complexity: Linear

          -

          -multimap friend functions

          +

          +multimap friend functions

          1. -
            friend bool operator==(const multimap & x, const multimap & y);
            +
            friend bool operator==(const multimap & x, const multimap & y);

            Effects: Returns true if x and y are equal

            Complexity: Linear to the number of elements in the container.

          2. -
            friend bool operator!=(const multimap & x, const multimap & y);
            +
            friend bool operator!=(const multimap & x, const multimap & y);

            Effects: Returns true if x and y are unequal

            Complexity: Linear to the number of elements in the container.

          3. -
            friend bool operator<(const multimap & x, const multimap & y);
            +
            friend bool operator<(const multimap & x, const multimap & y);

            Effects: Returns true if x is less than y

            Complexity: Linear to the number of elements in the container.

          4. -
            friend bool operator>(const multimap & x, const multimap & y);
            +
            friend bool operator>(const multimap & x, const multimap & y);

            Effects: Returns true if x is greater than y

            Complexity: Linear to the number of elements in the container.

          5. -
            friend bool operator<=(const multimap & x, const multimap & y);
            +
            friend bool operator<=(const multimap & x, const multimap & y);

            Effects: Returns true if x is equal or less than y

            Complexity: Linear to the number of elements in the container.

          6. -
            friend bool operator>=(const multimap & x, const multimap & y);
            +
            friend bool operator>=(const multimap & x, const multimap & y);

            Effects: Returns true if x is equal or greater than y

            Complexity: Linear to the number of elements in the container.

          7. -
            friend void swap(multimap & x, multimap & y);
            +
            friend void swap(multimap & x, multimap & y);

            Effects: x.swap(y)

            Complexity: Constant.

          8. diff --git a/doc/html/boost/container/multiset.html b/doc/html/boost/container/multiset.html index 3a9e2e2a37..d3e7a68f86 100644 --- a/doc/html/boost/container/multiset.html +++ b/doc/html/boost/container/multiset.html @@ -58,114 +58,114 @@ typedef implementation_defined node_type; // construct/copy/destruct - multiset() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); - explicit multiset(const allocator_type &); - explicit multiset(const Compare &); - multiset(const Compare &, const allocator_type &); - template<typename InputIterator> multiset(InputIterator, InputIterator); + multiset() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); + explicit multiset(const allocator_type &); + explicit multiset(const Compare &); + multiset(const Compare &, const allocator_type &); + template<typename InputIterator> multiset(InputIterator, InputIterator); template<typename InputIterator> - multiset(InputIterator, InputIterator, const allocator_type &); + multiset(InputIterator, InputIterator, const allocator_type &); template<typename InputIterator> - multiset(InputIterator, InputIterator, const Compare &); + multiset(InputIterator, InputIterator, const Compare &); template<typename InputIterator> - multiset(InputIterator, InputIterator, const Compare &, + multiset(InputIterator, InputIterator, const Compare &, const allocator_type &); template<typename InputIterator> - multiset(ordered_range_t, InputIterator, InputIterator); + multiset(ordered_range_t, InputIterator, InputIterator); template<typename InputIterator> - multiset(ordered_range_t, InputIterator, InputIterator, const Compare &); + multiset(ordered_range_t, InputIterator, InputIterator, const Compare &); template<typename InputIterator> - multiset(ordered_range_t, InputIterator, InputIterator, const Compare &, + multiset(ordered_range_t, InputIterator, InputIterator, const Compare &, const allocator_type &); - multiset(std::initializer_list< value_type >); - multiset(std::initializer_list< value_type >, const allocator_type &); - multiset(std::initializer_list< value_type >, const Compare &); - multiset(std::initializer_list< value_type >, const Compare &, + multiset(std::initializer_list< value_type >); + multiset(std::initializer_list< value_type >, const allocator_type &); + multiset(std::initializer_list< value_type >, const Compare &); + multiset(std::initializer_list< value_type >, const Compare &, const allocator_type &); - multiset(ordered_range_t, std::initializer_list< value_type >); - multiset(ordered_range_t, std::initializer_list< value_type >, + multiset(ordered_range_t, std::initializer_list< value_type >); + multiset(ordered_range_t, std::initializer_list< value_type >, const Compare &); - multiset(ordered_range_t, std::initializer_list< value_type >, + multiset(ordered_range_t, std::initializer_list< value_type >, const Compare &, const allocator_type &); - multiset(const multiset &); - multiset(multiset &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); - multiset(const multiset &, const allocator_type &); - multiset(multiset &&, const allocator_type &); - multiset & operator=(const multiset &); - multiset & operator=(multiset &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); - multiset & operator=(std::initializer_list< value_type >); + multiset(const multiset &); + multiset(multiset &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); + multiset(const multiset &, const allocator_type &); + multiset(multiset &&, const allocator_type &); + multiset & operator=(const multiset &); + multiset & operator=(multiset &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); + multiset & operator=(std::initializer_list< value_type >); - // public member functions - allocator_type get_allocator() const; - stored_allocator_type & get_stored_allocator(); - const stored_allocator_type & get_stored_allocator() const; - iterator begin(); - const_iterator begin() const; - const_iterator cbegin() const; - iterator end() noexcept; - const_iterator end() const noexcept; - const_iterator cend() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - const_reverse_iterator crbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const; - size_type size() const; - size_type max_size() const; - template<class... Args> iterator emplace(Args &&...); - template<class... Args> iterator emplace_hint(const_iterator, Args &&...); - iterator insert(const value_type &); - iterator insert(value_type &&); - iterator insert(const_iterator, const value_type &); - iterator insert(const_iterator, value_type &&); - template<typename InputIterator> void insert(InputIterator, InputIterator); - void insert(std::initializer_list< value_type >); - iterator insert(node_type &&); - iterator insert(const_iterator, node_type &&); - template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &); - template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &&); - template<typename C2> void merge(set< Key, C2, Allocator, Options > &); - template<typename C2> void merge(set< Key, C2, Allocator, Options > &&); - iterator erase(const_iterator); - size_type erase(const key_type &); - iterator erase(const_iterator, const_iterator); - node_type extract(const_iterator); - node_type extract(const key_type &); - void swap(multiset &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); - void clear() noexcept; - key_compare key_comp() const; - value_compare value_comp() const; - iterator find(const key_type &); - const_iterator find(const key_type &) const; - size_type count(const key_type &) const; - iterator lower_bound(const key_type &); - const_iterator lower_bound(const key_type &) const; - iterator upper_bound(const key_type &); - const_iterator upper_bound(const key_type &) const; + // public member functions + allocator_type get_allocator() const; + stored_allocator_type & get_stored_allocator(); + const stored_allocator_type & get_stored_allocator() const; + iterator begin(); + const_iterator begin() const; + const_iterator cbegin() const; + iterator end() noexcept; + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator crbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const; + size_type size() const; + size_type max_size() const; + template<class... Args> iterator emplace(Args &&...); + template<class... Args> iterator emplace_hint(const_iterator, Args &&...); + iterator insert(const value_type &); + iterator insert(value_type &&); + iterator insert(const_iterator, const value_type &); + iterator insert(const_iterator, value_type &&); + template<typename InputIterator> void insert(InputIterator, InputIterator); + void insert(std::initializer_list< value_type >); + iterator insert(node_type &&); + iterator insert(const_iterator, node_type &&); + template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &); + template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &&); + template<typename C2> void merge(set< Key, C2, Allocator, Options > &); + template<typename C2> void merge(set< Key, C2, Allocator, Options > &&); + iterator erase(const_iterator); + size_type erase(const key_type &); + iterator erase(const_iterator, const_iterator); + node_type extract(const_iterator); + node_type extract(const key_type &); + void swap(multiset &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); + void clear() noexcept; + key_compare key_comp() const; + value_compare value_comp() const; + iterator find(const key_type &); + const_iterator find(const key_type &) const; + size_type count(const key_type &) const; + iterator lower_bound(const key_type &); + const_iterator lower_bound(const key_type &) const; + iterator upper_bound(const key_type &); + const_iterator upper_bound(const key_type &) const; std::pair< const_iterator, const_iterator > - equal_range(const key_type &) const; - std::pair< iterator, iterator > equal_range(const key_type &); - void rebalance(); + equal_range(const key_type &) const; + std::pair< iterator, iterator > equal_range(const key_type &); + void rebalance(); - // friend functions - friend bool operator==(const multiset &, const multiset &); - friend bool operator!=(const multiset &, const multiset &); - friend bool operator<(const multiset &, const multiset &); - friend bool operator>(const multiset &, const multiset &); - friend bool operator<=(const multiset &, const multiset &); - friend bool operator>=(const multiset &, const multiset &); - friend void swap(multiset &, multiset &); + // friend functions + friend bool operator==(const multiset &, const multiset &); + friend bool operator!=(const multiset &, const multiset &); + friend bool operator<(const multiset &, const multiset &); + friend bool operator>(const multiset &, const multiset &); + friend bool operator<=(const multiset &, const multiset &); + friend bool operator>=(const multiset &, const multiset &); + friend void swap(multiset &, multiset &); };
          -

          Description

          +

          Description

          A multiset is a kind of associative container that supports equivalent keys (possibly contains multiple copies of the same key value) and provides for fast retrieval of the keys themselves. Class multiset supports bidirectional iterators.

          A multiset satisfies all of the requirements of a container and of a reversible container, and of an associative container). multiset also provides most operations described for duplicate keys.

          -

          Template Parameters

          +

          Template Parameters

          1. typename Key
            @@ -186,59 +186,59 @@
          -

          +

          multiset public construct/copy/destruct

          1. -
            multiset() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
            +
            multiset() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

            Effects: Default constructs an empty set.

            Complexity: Constant.

          2. -
            explicit multiset(const allocator_type & a);
            +
            explicit multiset(const allocator_type & a);

            Effects: Constructs an empty set using the specified allocator object.

            Complexity: Constant.

          3. -
            explicit multiset(const Compare & comp);
            +
            explicit multiset(const Compare & comp);

            Effects: Constructs an empty set using the specified comparison object.

            Complexity: Constant.

          4. -
            multiset(const Compare & comp, const allocator_type & a);
            +
            multiset(const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty set using the specified comparison object and allocator.

            Complexity: Constant.

          5. template<typename InputIterator> 
            -  multiset(InputIterator first, InputIterator last);
            + multiset(InputIterator first, InputIterator last);

            Effects: Constructs an empty set using and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          6. template<typename InputIterator> 
            -  multiset(InputIterator first, InputIterator last, const allocator_type & a);
            + multiset(InputIterator first, InputIterator last, const allocator_type & a);

            Effects: Constructs an empty set using the specified allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          7. template<typename InputIterator> 
            -  multiset(InputIterator first, InputIterator last, const Compare & comp);
            + multiset(InputIterator first, InputIterator last, const Compare & comp);

            Effects: Constructs an empty set using the specified comparison object and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          8. template<typename InputIterator> 
            -  multiset(InputIterator first, InputIterator last, const Compare & comp, 
            +  multiset(InputIterator first, InputIterator last, const Compare & comp, 
                        const allocator_type & a);

            Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

            Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

          9. template<typename InputIterator> 
            -  multiset(ordered_range_t, InputIterator first, InputIterator last);
            + multiset(ordered_range_t, InputIterator first, InputIterator last);

            Effects: Constructs an empty multiset and and inserts elements from the ordered range [first ,last ). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate.

            Complexity: Linear in N.

            @@ -246,7 +246,7 @@
          10. template<typename InputIterator> 
            -  multiset(ordered_range_t, InputIterator first, InputIterator last, 
            +  multiset(ordered_range_t, InputIterator first, InputIterator last, 
                        const Compare & comp);

            Effects: Constructs an empty multiset using the specified comparison object and inserts elements from the ordered range [first ,last ). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate.

            @@ -255,7 +255,7 @@
          11. template<typename InputIterator> 
            -  multiset(ordered_range_t, InputIterator first, InputIterator last, 
            +  multiset(ordered_range_t, InputIterator first, InputIterator last, 
                        const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty multiset using the specified comparison object and allocator, and inserts elements from the ordered range [first ,last ). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [first ,last) must be ordered according to the predicate.

            @@ -263,35 +263,35 @@

            Note: Non-standard extension.

          12. -
            multiset(std::initializer_list< value_type > il);
            +
            multiset(std::initializer_list< value_type > il);

            Effects: Constructs an empty set and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

          13. -
            multiset(std::initializer_list< value_type > il, const allocator_type & a);
            +
            multiset(std::initializer_list< value_type > il, const allocator_type & a);

            Effects: Constructs an empty set using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

          14. -
            multiset(std::initializer_list< value_type > il, const Compare & comp);
            +
            multiset(std::initializer_list< value_type > il, const Compare & comp);

            Effects: Constructs an empty set using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

          15. -
            multiset(std::initializer_list< value_type > il, const Compare & comp, 
            +
            multiset(std::initializer_list< value_type > il, const Compare & comp, 
                      const allocator_type & a);

            Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

            Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

          16. -
            multiset(ordered_range_t, std::initializer_list< value_type > il);
            +
            multiset(ordered_range_t, std::initializer_list< value_type > il);

            Effects: Constructs an empty set and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            Complexity: Linear in N.

            Note: Non-standard extension.

          17. -
            multiset(ordered_range_t, std::initializer_list< value_type > il, 
            +
            multiset(ordered_range_t, std::initializer_list< value_type > il, 
                      const Compare & comp);

            Effects: Constructs an empty set using the specified comparison object and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            @@ -299,7 +299,7 @@

            Note: Non-standard extension.

          18. -
            multiset(ordered_range_t, std::initializer_list< value_type > il, 
            +
            multiset(ordered_range_t, std::initializer_list< value_type > il, 
                      const Compare & comp, const allocator_type & a);

            Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

            Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

            @@ -307,218 +307,218 @@

            Note: Non-standard extension.

          19. -
            multiset(const multiset & x);
            +
            multiset(const multiset & x);

            Effects: Copy constructs a set.

            Complexity: Linear in x.size().

          20. -
            multiset(multiset && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
            +
            multiset(multiset && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

            Effects: Move constructs a set. Constructs *this using x's resources.

            Complexity: Constant.

            Postcondition: x is emptied.

          21. -
            multiset(const multiset & x, const allocator_type & a);
            +
            multiset(const multiset & x, const allocator_type & a);

            Effects: Copy constructs a set using the specified allocator.

            Complexity: Linear in x.size().

          22. -
            multiset(multiset && x, const allocator_type & a);
            +
            multiset(multiset && x, const allocator_type & a);

            Effects: Move constructs a set using the specified allocator. Constructs *this using x's resources.

            Complexity: Constant if a == x.get_allocator(), linear otherwise.

          23. -
            multiset & operator=(const multiset & x);
            +
            multiset & operator=(const multiset & x);

            Effects: Makes *this a copy of x.

            Complexity: Linear in x.size().

          24. -
            multiset & operator=(multiset && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
            +
            multiset & operator=(multiset && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

            Effects: this->swap(x.get()).

            Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

            Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

          25. -
            multiset & operator=(std::initializer_list< value_type > il);
            +
            multiset & operator=(std::initializer_list< value_type > il);

            Effects: Copy all elements from il to *this.

            Complexity: Linear in il.size().

          -

          -multiset public member functions

          +

          +multiset public member functions

          1. -
            allocator_type get_allocator() const;
            +
            allocator_type get_allocator() const;

            Effects: Returns a copy of the allocator that was passed to the object's constructor.

            Complexity: Constant.

          2. -
            stored_allocator_type & get_stored_allocator();
            +
            stored_allocator_type & get_stored_allocator();

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          3. -
            const stored_allocator_type & get_stored_allocator() const;
            +
            const stored_allocator_type & get_stored_allocator() const;

            Effects: Returns a reference to the internal allocator.

            Throws: Nothing

            Complexity: Constant.

            Note: Non-standard extension.

          4. -
            iterator begin();
            +
            iterator begin();

            Effects: Returns an iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant

          5. -
            const_iterator begin() const;
            +
            const_iterator begin() const;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          6. -
            const_iterator cbegin() const;
            +
            const_iterator cbegin() const;

            Effects: Returns a const_iterator to the first element contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          7. -
            iterator end() noexcept;
            +
            iterator end() noexcept;

            Effects: Returns an iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          8. -
            const_iterator end() const noexcept;
            +
            const_iterator end() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          9. -
            const_iterator cend() const noexcept;
            +
            const_iterator cend() const noexcept;

            Effects: Returns a const_iterator to the end of the container.

            Throws: Nothing.

            Complexity: Constant.

          10. -
            reverse_iterator rbegin() noexcept;
            +
            reverse_iterator rbegin() noexcept;

            Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          11. -
            const_reverse_iterator rbegin() const noexcept;
            +
            const_reverse_iterator rbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          12. -
            const_reverse_iterator crbegin() const noexcept;
            +
            const_reverse_iterator crbegin() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          13. -
            reverse_iterator rend() noexcept;
            +
            reverse_iterator rend() noexcept;

            Effects: Returns a reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          14. -
            const_reverse_iterator rend() const noexcept;
            +
            const_reverse_iterator rend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          15. -
            const_reverse_iterator crend() const noexcept;
            +
            const_reverse_iterator crend() const noexcept;

            Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

            Throws: Nothing.

            Complexity: Constant.

          16. -
            bool empty() const;
            +
            bool empty() const;

            Effects: Returns true if the container contains no elements.

            Throws: Nothing.

            Complexity: Constant.

          17. -
            size_type size() const;
            +
            size_type size() const;

            Effects: Returns the number of the elements contained in the container.

            Throws: Nothing.

            Complexity: Constant.

          18. -
            size_type max_size() const;
            +
            size_type max_size() const;

            Effects: Returns the largest possible size of the container.

            Throws: Nothing.

            Complexity: Constant.

          19. -
            template<class... Args> iterator emplace(Args &&... args);
            +
            template<class... Args> iterator emplace(Args &&... args);

            Effects: Inserts an object of type Key constructed with std::forward<Args>(args)... and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          20. template<class... Args> 
            -  iterator emplace_hint(const_iterator p, Args &&... args);
            + iterator emplace_hint(const_iterator p, Args &&... args);

            Effects: Inserts an object of type Key constructed with std::forward<Args>(args)...

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          21. -
            iterator insert(const value_type & x);
            +
            iterator insert(const value_type & x);

            Effects: Inserts x and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          22. -
            iterator insert(value_type && x);
            +
            iterator insert(value_type && x);

            Effects: Inserts a copy of x in the container.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          23. -
            iterator insert(const_iterator p, const value_type & x);
            +
            iterator insert(const_iterator p, const value_type & x);

            Effects: Inserts a copy of x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          24. -
            iterator insert(const_iterator p, value_type && x);
            +
            iterator insert(const_iterator p, value_type && x);

            Effects: Inserts a value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          25. template<typename InputIterator> 
            -  void insert(InputIterator first, InputIterator last);
            + void insert(InputIterator first, InputIterator last);

            Requires: first, last are not iterators into *this.

            Effects: inserts each element from the range [first,last) .

            Complexity: At most N log(size()+N) (N is the distance from first to last)

          26. -
            void insert(std::initializer_list< value_type > il);
            +
            void insert(std::initializer_list< value_type > il);

            Effects: inserts each element from the range [il.begin(),il.end()) if and only if there is no element with key equivalent to the key of that element.

            Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end())

          27. -
            iterator insert(node_type && nh);
            +
            iterator insert(node_type && nh);

            Effects: Inserts a new value move-constructed from x and returns the iterator pointing to the newly inserted element.

            Complexity: Logarithmic.

          28. -
            iterator insert(const_iterator hint, node_type && nh);
            +
            iterator insert(const_iterator hint, node_type && nh);

            Effects: Inserts a new value move constructed from x in the container. p is a hint pointing to where the insert should start to search.

            Returns: An iterator pointing to the element with key equivalent to the key of x.

            Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

          29. template<typename C2> 
            -  void merge(multiset< Key, C2, Allocator, Options > & source);
            + void merge(multiset< Key, C2, Allocator, Options > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -527,7 +527,7 @@
          30. template<typename C2> 
            -  void merge(multiset< Key, C2, Allocator, Options > && source);
            + void merge(multiset< Key, C2, Allocator, Options > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -535,7 +535,7 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          31. -
            template<typename C2> void merge(set< Key, C2, Allocator, Options > & source);
            +
            template<typename C2> void merge(set< Key, C2, Allocator, Options > & source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -543,7 +543,7 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          32. -
            template<typename C2> void merge(set< Key, C2, Allocator, Options > && source);
            +
            template<typename C2> void merge(set< Key, C2, Allocator, Options > && source);

            Requires: this->get_allocator() == source.get_allocator().

            Effects: Extracts each element in source and insert it into a using the comparison object of *this.

            Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

            @@ -551,146 +551,146 @@

            Complexity: N log(a.size() + N) (N has the value source.size())

          33. -
            iterator erase(const_iterator p);
            +
            iterator erase(const_iterator p);

            Effects: Erases the element pointed to by p.

            Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

            Complexity: Amortized constant time

          34. -
            size_type erase(const key_type & x);
            +
            size_type erase(const key_type & x);

            Effects: Erases all elements in the container with key equivalent to x.

            Returns: Returns the number of erased elements.

            Complexity: log(size()) + count(k)

          35. -
            iterator erase(const_iterator first, const_iterator last);
            +
            iterator erase(const_iterator first, const_iterator last);

            Effects: Erases all the elements in the range [first, last).

            Returns: Returns last.

            Complexity: log(size())+N where N is the distance from first to last.

          36. -
            node_type extract(const_iterator p);
            +
            node_type extract(const_iterator p);

            Effects: Removes the element pointed to by "position".

            Returns: A node_type owning the element, otherwise an empty node_type.

            Complexity: Amortized constant.

          37. -
            node_type extract(const key_type & x);
            +
            node_type extract(const key_type & x);

            Effects: Removes the first element in the container with key equivalent to k.

            Returns: A node_type owning the element if found, otherwise an empty node_type.

            Complexity: log(a.size()).

          38. -
            void swap(multiset & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
            +
            void swap(multiset & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

            Effects: Swaps the contents of *this and x.

            Throws: Nothing.

            Complexity: Constant.

          39. -
            void clear() noexcept;
            +
            void clear() noexcept;

            Effects: erase(a.begin(),a.end()).

            Postcondition: size() == 0.

            Complexity: linear in size().

          40. -
            key_compare key_comp() const;
            +
            key_compare key_comp() const;

            Effects: Returns the comparison object out of which a was constructed.

            Complexity: Constant.

          41. -
            value_compare value_comp() const;
            +
            value_compare value_comp() const;

            Effects: Returns an object of value_compare constructed out of the comparison object.

            Complexity: Constant.

          42. -
            iterator find(const key_type & x);
            +
            iterator find(const key_type & x);

            Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          43. -
            const_iterator find(const key_type & x) const;
            +
            const_iterator find(const key_type & x) const;

            Returns: A const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

            Complexity: Logarithmic.

          44. -
            size_type count(const key_type & x) const;
            +
            size_type count(const key_type & x) const;

            Returns: The number of elements with key equivalent to x.

            Complexity: log(size())+count(k)

          45. -
            iterator lower_bound(const key_type & x);
            +
            iterator lower_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          46. -
            const_iterator lower_bound(const key_type & x) const;
            +
            const_iterator lower_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

            Complexity: Logarithmic

          47. -
            iterator upper_bound(const key_type & x);
            +
            iterator upper_bound(const key_type & x);

            Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          48. -
            const_iterator upper_bound(const key_type & x) const;
            +
            const_iterator upper_bound(const key_type & x) const;

            Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

            Complexity: Logarithmic

          49. std::pair< const_iterator, const_iterator > 
            -equal_range(const key_type & x) const;
            +equal_range(const key_type & x) const;

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          50. -
            std::pair< iterator, iterator > equal_range(const key_type & x);
            +
            std::pair< iterator, iterator > equal_range(const key_type & x);

            Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

            Complexity: Logarithmic

          51. -
            void rebalance();
            +
            void rebalance();

            Effects: Rebalances the tree. It's a no-op for Red-Black and AVL trees.

            Complexity: Linear

          -

          -multiset friend functions

          +

          +multiset friend functions

          1. -
            friend bool operator==(const multiset & x, const multiset & y);
            +
            friend bool operator==(const multiset & x, const multiset & y);

            Effects: Returns true if x and y are equal

            Complexity: Linear to the number of elements in the container.

          2. -
            friend bool operator!=(const multiset & x, const multiset & y);
            +
            friend bool operator!=(const multiset & x, const multiset & y);

            Effects: Returns true if x and y are unequal

            Complexity: Linear to the number of elements in the container.

          3. -
            friend bool operator<(const multiset & x, const multiset & y);
            +
            friend bool operator<(const multiset & x, const multiset & y);

            Effects: Returns true if x is less than y

            Complexity: Linear to the number of elements in the container.

          4. -
            friend bool operator>(const multiset & x, const multiset & y);
            +
            friend bool operator>(const multiset & x, const multiset & y);

            Effects: Returns true if x is greater than y

            Complexity: Linear to the number of elements in the container.

          5. -
            friend bool operator<=(const multiset & x, const multiset & y);
            +
            friend bool operator<=(const multiset & x, const multiset & y);

            Effects: Returns true if x is equal or less than y

            Complexity: Linear to the number of elements in the container.

          6. -
            friend bool operator>=(const multiset & x, const multiset & y);
            +
            friend bool operator>=(const multiset & x, const multiset & y);

            Effects: Returns true if x is equal or greater than y

            Complexity: Linear to the number of elements in the container.

          7. -
            friend void swap(multiset & x, multiset & y);
            +
            friend void swap(multiset & x, multiset & y);

            Effects: x.swap(y)

            Complexity: Constant.

          8. diff --git a/doc/html/boost/container/new_allocator.html b/doc/html/boost/container/new_allocator.html index 0c2a43af16..d4fd00f2ad 100644 --- a/doc/html/boost/container/new_allocator.html +++ b/doc/html/boost/container/new_allocator.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@
            -PrevUpHomeNext +PrevUpHomeNext
            @@ -43,7 +43,7 @@ typedef const T & const_reference; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; - typedef implementation_defined propagate_on_container_move_assignment; // A integral constant of type bool with value true. + typedef implementation_defined propagate_on_container_move_assignment; // A integral constant of type bool with value true. typedef implementation_defined is_always_equal; // A integral constant of type bool with value true. // member classes/structs/unions @@ -54,81 +54,81 @@ }; // construct/copy/destruct - new_allocator() noexcept; - new_allocator(const new_allocator &) noexcept; - template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept; + new_allocator() noexcept; + new_allocator(const new_allocator &) noexcept; + template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept; - // public member functions - pointer allocate(size_type); - void deallocate(pointer, size_type) noexcept; - size_type max_size() const noexcept; + // public member functions + pointer allocate(size_type); + void deallocate(pointer, size_type) noexcept; + size_type max_size() const noexcept; - // friend functions - friend void swap(new_allocator &, new_allocator &) noexcept; - friend bool operator==(const new_allocator &, const new_allocator &) noexcept; - friend bool operator!=(const new_allocator &, const new_allocator &) noexcept; + // friend functions + friend void swap(new_allocator &, new_allocator &) noexcept; + friend bool operator==(const new_allocator &, const new_allocator &) noexcept; + friend bool operator!=(const new_allocator &, const new_allocator &) noexcept; };
            -

            Description

            +

            Description

            -

            +

            new_allocator public construct/copy/destruct

            1. -
              new_allocator() noexcept;
              +
              new_allocator() noexcept;

              Default constructor Never throws

            2. -
              new_allocator(const new_allocator &) noexcept;
              +
              new_allocator(const new_allocator &) noexcept;

              Constructor from other new_allocator. Never throws

            3. -
              template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept;
              +
              template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept;

              Constructor from related new_allocator. Never throws

            -

            -new_allocator public member functions

            +

            +new_allocator public member functions

            1. -
              pointer allocate(size_type count);
              +
              pointer allocate(size_type count);

              Allocates memory for an array of count elements. Throws std::bad_alloc if there is no enough memory

            2. -
              void deallocate(pointer ptr, size_type) noexcept;
              +
              void deallocate(pointer ptr, size_type) noexcept;

              Deallocates previously allocated memory. Never throws

            3. -
              size_type max_size() const noexcept;
              +
              size_type max_size() const noexcept;

              Returns the maximum number of elements that could be allocated. Never throws

            -

            -new_allocator friend functions

            +

            +new_allocator friend functions

            1. -
              friend void swap(new_allocator &, new_allocator &) noexcept;
              +
              friend void swap(new_allocator &, new_allocator &) noexcept;

              Swaps two allocators, does nothing because this new_allocator is stateless

            2. -
              friend bool operator==(const new_allocator &, const new_allocator &) noexcept;
              +
              friend bool operator==(const new_allocator &, const new_allocator &) noexcept;

              An new_allocator always compares to true, as memory allocated with one instance can be deallocated by another instance

            3. -
              friend bool operator!=(const new_allocator &, const new_allocator &) noexcept;
              +
              friend bool operator!=(const new_allocator &, const new_allocator &) noexcept;

              An new_allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

            -

            Specializations

            - +

            Specializations

            +
          @@ -142,7 +142,7 @@
          -PrevUpHomeNext +PrevUpHomeNext
          diff --git a/doc/html/boost/container/new_allocator/rebind.html b/doc/html/boost/container/new_allocator/rebind.html index 0abad96e91..a99ab22abe 100644 --- a/doc/html/boost/container/new_allocator/rebind.html +++ b/doc/html/boost/container/new_allocator/rebind.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
          -PrevUpHomeNext +PrevUpHomeNext
          @@ -39,7 +39,7 @@ typedef new_allocator< T2 > other; };
          -

          Description

          +

          Description

          Obtains an new_allocator that allocates objects of type T2

          @@ -53,7 +53,7 @@
          -PrevUpHomeNext +PrevUpHomeNext
          diff --git a/doc/html/boost/container/new_allocator__idp41598944.html b/doc/html/boost/container/new_allocator__idp41598944.html deleted file mode 100644 index 218ecb59b8..0000000000 --- a/doc/html/boost/container/new_allocator__idp41598944.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - -Class new_allocator<void> - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Class new_allocator<void>

          -

          boost::container::new_allocator<void> — Specialization of new_allocator for void types.

          -
          -

          Synopsis

          -
          // In header: <boost/container/new_allocator.hpp>
          -
          -
          -class new_allocator<void> {
          -public:
          -  // types
          -  typedef void                   value_type;                            
          -  typedef void *                 pointer;                               
          -  typedef const void *           const_pointer;                         
          -  typedef implementation_defined propagate_on_container_move_assignment;  // A integral constant of type bool with value true. 
          -  typedef implementation_defined is_always_equal;                         // A integral constant of type bool with value true. 
          -
          -  // member classes/structs/unions
          -  template<typename T2> 
          -  struct rebind {
          -    // types
          -    typedef new_allocator< T2 > other;
          -  };
          -
          -  // construct/copy/destruct
          -  new_allocator() noexcept;
          -  new_allocator(const new_allocator &) noexcept;
          -  template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept;
          -
          -  // friend functions
          -  friend void swap(new_allocator &, new_allocator &) noexcept;
          -  friend bool operator==(const new_allocator &, const new_allocator &) noexcept;
          -  friend bool operator!=(const new_allocator &, const new_allocator &) noexcept;
          -};
          -
          -

          Description

          -
          -

          -new_allocator - public - construct/copy/destruct

          -
            -
          1. -
            new_allocator() noexcept;
            -

            Default constructor Never throws

            -
          2. -
          3. -
            new_allocator(const new_allocator &) noexcept;
            -

            Constructor from other new_allocator. Never throws

            -
          4. -
          5. -
            template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept;
            -

            Constructor from related new_allocator. Never throws

            -
          6. -
          -
          -
          -

          -new_allocator friend functions

          -
            -
          1. -
            friend void swap(new_allocator &, new_allocator &) noexcept;
            -

            Swaps two allocators, does nothing because this new_allocator is stateless

            -
          2. -
          3. -
            friend bool operator==(const new_allocator &, const new_allocator &) noexcept;
            -

            An new_allocator always compares to true, as memory allocated with one instance can be deallocated by another instance

            -
          4. -
          5. -
            friend bool operator!=(const new_allocator &, const new_allocator &) noexcept;
            -

            An new_allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

            -
          6. -
          -
          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/new_allocator__idp41598944/rebind.html b/doc/html/boost/container/new_allocator__idp41598944/rebind.html deleted file mode 100644 index 7aebcfb4db..0000000000 --- a/doc/html/boost/container/new_allocator__idp41598944/rebind.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - -Struct template rebind - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Struct template rebind

          -

          boost::container::new_allocator<void>::rebind

          -
          -

          Synopsis

          -
          // In header: <boost/container/new_allocator.hpp>
          -
          -
          -template<typename T2> 
          -struct rebind {
          -  // types
          -  typedef new_allocator< T2 > other;
          -};
          -
          -

          Description

          -

          Obtains an new_allocator that allocates objects of type T2

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/new_allocator__idp62944752.html b/doc/html/boost/container/new_allocator__idp62944752.html new file mode 100644 index 0000000000..cfd828dac2 --- /dev/null +++ b/doc/html/boost/container/new_allocator__idp62944752.html @@ -0,0 +1,117 @@ + + + + +Class new_allocator<void> + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Class new_allocator<void>

          +

          boost::container::new_allocator<void> — Specialization of new_allocator for void types.

          +
          +

          Synopsis

          +
          // In header: <boost/container/new_allocator.hpp>
          +
          +
          +class new_allocator<void> {
          +public:
          +  // types
          +  typedef void                   value_type;                            
          +  typedef void *                 pointer;                               
          +  typedef const void *           const_pointer;                         
          +  typedef implementation_defined propagate_on_container_move_assignment;  // A integral constant of type bool with value true. 
          +  typedef implementation_defined is_always_equal;                         // A integral constant of type bool with value true. 
          +
          +  // member classes/structs/unions
          +  template<typename T2> 
          +  struct rebind {
          +    // types
          +    typedef new_allocator< T2 > other;
          +  };
          +
          +  // construct/copy/destruct
          +  new_allocator() noexcept;
          +  new_allocator(const new_allocator &) noexcept;
          +  template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept;
          +
          +  // friend functions
          +  friend void swap(new_allocator &, new_allocator &) noexcept;
          +  friend bool operator==(const new_allocator &, const new_allocator &) noexcept;
          +  friend bool operator!=(const new_allocator &, const new_allocator &) noexcept;
          +};
          +
          +

          Description

          +
          +

          +new_allocator + public + construct/copy/destruct

          +
            +
          1. +
            new_allocator() noexcept;
            +

            Default constructor Never throws

            +
          2. +
          3. +
            new_allocator(const new_allocator &) noexcept;
            +

            Constructor from other new_allocator. Never throws

            +
          4. +
          5. +
            template<typename T2> new_allocator(const new_allocator< T2 > &) noexcept;
            +

            Constructor from related new_allocator. Never throws

            +
          6. +
          +
          +
          +

          +new_allocator friend functions

          +
            +
          1. +
            friend void swap(new_allocator &, new_allocator &) noexcept;
            +

            Swaps two allocators, does nothing because this new_allocator is stateless

            +
          2. +
          3. +
            friend bool operator==(const new_allocator &, const new_allocator &) noexcept;
            +

            An new_allocator always compares to true, as memory allocated with one instance can be deallocated by another instance

            +
          4. +
          5. +
            friend bool operator!=(const new_allocator &, const new_allocator &) noexcept;
            +

            An new_allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

            +
          6. +
          +
          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/new_allocator__idp62944752/rebind.html b/doc/html/boost/container/new_allocator__idp62944752/rebind.html new file mode 100644 index 0000000000..e91e426668 --- /dev/null +++ b/doc/html/boost/container/new_allocator__idp62944752/rebind.html @@ -0,0 +1,59 @@ + + + + +Struct template rebind + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Struct template rebind

          +

          boost::container::new_allocator<void>::rebind

          +
          +

          Synopsis

          +
          // In header: <boost/container/new_allocator.hpp>
          +
          +
          +template<typename T2> 
          +struct rebind {
          +  // types
          +  typedef new_allocator< T2 > other;
          +};
          +
          +

          Description

          +

          Obtains an new_allocator that allocates objects of type T2

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/node_allocator.html b/doc/html/boost/container/node_allocator.html index fdbb62a671..3c27b87802 100644 --- a/doc/html/boost/container/node_allocator.html +++ b/doc/html/boost/container/node_allocator.html @@ -53,139 +53,139 @@ }; // construct/copy/destruct - node_allocator() noexcept; - node_allocator(const node_allocator &) noexcept; + node_allocator() noexcept; + node_allocator(const node_allocator &) noexcept; template<typename T2> - node_allocator(const node_allocator< T2, NodesPerBlock > &) noexcept; - ~node_allocator(); + node_allocator(const node_allocator< T2, NodesPerBlock > &) noexcept; + ~node_allocator(); - // public member functions - size_type max_size() const; - pointer allocate(size_type, const void * = 0); - void deallocate(const pointer &, size_type) noexcept; - pointer allocation_command(allocation_type, size_type, size_type &, + // public member functions + size_type max_size() const; + pointer allocate(size_type, const void * = 0); + void deallocate(const pointer &, size_type) noexcept; + pointer allocation_command(allocation_type, size_type, size_type &, pointer &); - size_type size(pointer) const noexcept; - pointer allocate_one(); - void allocate_individual(std::size_t, multiallocation_chain &); - void deallocate_one(pointer) noexcept; - void deallocate_individual(multiallocation_chain &) noexcept; - void allocate_many(size_type, std::size_t, multiallocation_chain &); - void allocate_many(const size_type *, size_type, multiallocation_chain &); - void deallocate_many(multiallocation_chain &) noexcept; + size_type size(pointer) const noexcept; + pointer allocate_one(); + void allocate_individual(std::size_t, multiallocation_chain &); + void deallocate_one(pointer) noexcept; + void deallocate_individual(multiallocation_chain &) noexcept; + void allocate_many(size_type, std::size_t, multiallocation_chain &); + void allocate_many(const size_type *, size_type, multiallocation_chain &); + void deallocate_many(multiallocation_chain &) noexcept; - // public static functions - static void deallocate_free_blocks() noexcept; + // public static functions + static void deallocate_free_blocks() noexcept; - // friend functions - friend void swap(self_t &, self_t &) noexcept; - friend bool operator==(const node_allocator &, const node_allocator &) noexcept; - friend bool operator!=(const node_allocator &, const node_allocator &) noexcept; + // friend functions + friend void swap(self_t &, self_t &) noexcept; + friend bool operator==(const node_allocator &, const node_allocator &) noexcept; + friend bool operator!=(const node_allocator &, const node_allocator &) noexcept; - // private member functions - pointer priv_allocation_command(allocation_type, std::size_t, size_type &, + // private member functions + pointer priv_allocation_command(allocation_type, std::size_t, size_type &, pointer &); };
          -

          Description

          +

          Description

          An STL node allocator that uses a modified DlMalloc as memory source.

          This node allocator shares a segregated storage between all instances of node_allocator with equal sizeof(T).

          NodesPerBlock is the number of nodes allocated at once when the allocator runs out of nodes

          -

          +

          node_allocator public construct/copy/destruct

          1. -
            node_allocator() noexcept;
            Default constructor.
          2. +
            node_allocator() noexcept;
            Default constructor.
          3. -
            node_allocator(const node_allocator &) noexcept;
            Copy constructor from other node_allocator.
          4. +
            node_allocator(const node_allocator &) noexcept;
            Copy constructor from other node_allocator.
          5. template<typename T2> 
            -  node_allocator(const node_allocator< T2, NodesPerBlock > &) noexcept;
            Copy constructor from related node_allocator.
          6. + node_allocator(const node_allocator< T2, NodesPerBlock > &) noexcept;Copy constructor from related node_allocator.
          7. -
            ~node_allocator();
            Destructor.
          8. +
            ~node_allocator();
            Destructor.
          -

          -node_allocator public member functions

          +

          +node_allocator public member functions

          1. -
            size_type max_size() const;
            +
            size_type max_size() const;

            Returns the number of elements that could be allocated. Never throws

          2. -
            pointer allocate(size_type count, const void * = 0);
            +
            pointer allocate(size_type count, const void * = 0);

            Allocate memory for an array of count elements. Throws std::bad_alloc if there is no enough memory

          3. -
            void deallocate(const pointer & ptr, size_type count) noexcept;
            +
            void deallocate(const pointer & ptr, size_type count) noexcept;

            Deallocate allocated memory. Never throws

          4. -
          5. pointer allocation_command(allocation_type command, size_type limit_size, 
            +
          6. pointer allocation_command(allocation_type command, size_type limit_size, 
                                        size_type & prefer_in_recvd_out_size, 
                                        pointer & reuse);
          7. -
            size_type size(pointer p) const noexcept;
            +
            size_type size(pointer p) const noexcept;

            Returns maximum the number of objects the previously allocated memory pointed by p can hold.

          8. -
            pointer allocate_one();
            +
            pointer allocate_one();

            Allocates just one object. Memory allocated with this function must be deallocated only with deallocate_one(). Throws bad_alloc if there is no enough memory

          9. -
            void allocate_individual(std::size_t num_elements, 
            +
            void allocate_individual(std::size_t num_elements, 
                                      multiallocation_chain & chain);

            Allocates many elements of size == 1. Elements must be individually deallocated with deallocate_one()

          10. -
            void deallocate_one(pointer p) noexcept;
            +
            void deallocate_one(pointer p) noexcept;

            Deallocates memory previously allocated with allocate_one(). You should never use deallocate_one to deallocate memory allocated with other functions different from allocate_one(). Never throws

          11. -
          12. void deallocate_individual(multiallocation_chain & chain) noexcept;
          13. +
          14. void deallocate_individual(multiallocation_chain & chain) noexcept;
          15. -
            void allocate_many(size_type elem_size, std::size_t n_elements, 
            +
            void allocate_many(size_type elem_size, std::size_t n_elements, 
                                multiallocation_chain & chain);

            Allocates many elements of size elem_size. Elements must be individually deallocated with deallocate()

          16. -
            void allocate_many(const size_type * elem_sizes, size_type n_elements, 
            +
            void allocate_many(const size_type * elem_sizes, size_type n_elements, 
                                multiallocation_chain & chain);

            Allocates n_elements elements, each one of size elem_sizes[i] Elements must be individually deallocated with deallocate()

          17. -
          18. void deallocate_many(multiallocation_chain & chain) noexcept;
          19. +
          20. void deallocate_many(multiallocation_chain & chain) noexcept;
          -

          -node_allocator public static functions

          +

          +node_allocator public static functions

          1. -
            static void deallocate_free_blocks() noexcept;
            Deallocates all free blocks of the pool.
          +
          static void deallocate_free_blocks() noexcept;
          Deallocates all free blocks of the pool.
        -

        -node_allocator friend functions

        +

        +node_allocator friend functions

        1. -
          friend void swap(self_t &, self_t &) noexcept;
          +
          friend void swap(self_t &, self_t &) noexcept;

          Swaps allocators. Does not throw. If each allocator is placed in a different memory segment, the result is undefined.

        2. -
          friend bool operator==(const node_allocator &, const node_allocator &) noexcept;
          +
          friend bool operator==(const node_allocator &, const node_allocator &) noexcept;

          An allocator always compares to true, as memory allocated with one instance can be deallocated by another instance

        3. -
          friend bool operator!=(const node_allocator &, const node_allocator &) noexcept;
          +
          friend bool operator!=(const node_allocator &, const node_allocator &) noexcept;

          An allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

        -

        -node_allocator private member functions

        -
        1. pointer priv_allocation_command(allocation_type command, 
          +

          +node_allocator private member functions

          +
          1. pointer priv_allocation_command(allocation_type command, 
                                             std::size_t limit_size, 
                                             size_type & prefer_in_recvd_out_size, 
                                             pointer & reuse);
          diff --git a/doc/html/boost/container/node_allocator/rebind.html b/doc/html/boost/container/node_allocator/rebind.html index 4633c0341d..1186dee315 100644 --- a/doc/html/boost/container/node_allocator/rebind.html +++ b/doc/html/boost/container/node_allocator/rebind.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
          -PrevUpHomeNext +PrevUpHomeNext
          @@ -39,7 +39,7 @@ typedef node_allocator< T2, NodesPerBlock > other; };
        -

        Description

        +

        Description

        Obtains node_allocator from node_allocator

        @@ -53,7 +53,7 @@
        -PrevUpHomeNext +PrevUpHomeNext
        diff --git a/doc/html/boost/container/node_handle.html b/doc/html/boost/container/node_handle.html index 5d8d571be1..2da113e923 100644 --- a/doc/html/boost/container/node_handle.html +++ b/doc/html/boost/container/node_handle.html @@ -43,32 +43,32 @@ typedef priv_node_t container_node_type; // construct/copy/destruct - node_handle() noexcept; - node_handle(node_pointer, const nallocator_type &) noexcept; + node_handle() noexcept; + node_handle(node_pointer, const nallocator_type &) noexcept; template<typename KeyMapped2> - node_handle(node_handle< NodeAllocator, KeyMapped2 > &&, unspecified = 0) noexcept; - node_handle(node_handle &&) noexcept; - node_handle & operator=(node_handle &&) noexcept; - ~node_handle(); + node_handle(node_handle< NodeAllocator, KeyMapped2 > &&, unspecified = 0) noexcept; + node_handle(node_handle &&) noexcept; + node_handle & operator=(node_handle &&) noexcept; + ~node_handle(); - // friend functions - friend void swap(node_handle &, node_handle &) noexcept(BOOST_NOEXCEPT(x.swap(y)))); + // friend functions + friend void swap(node_handle &, node_handle &) noexcept(BOOST_NOEXCEPT(x.swap(y)))); - // public member functions - value_type & value() const noexcept; - key_type & key() const noexcept; - mapped_type & mapped() const noexcept; - allocator_type get_allocator() const; - explicit operator bool() const noexcept; - bool empty() const noexcept; - void swap(node_handle &) noexcept(nator_traits::propagate_on_container_swap::value||nator_traits::is_always_equal::value)); - node_pointer release() noexcept; - node_pointer get() const noexcept; - nallocator_type & node_alloc() noexcept; - const nallocator_type & node_alloc() const noexcept; + // public member functions + value_type & value() const noexcept; + key_type & key() const noexcept; + mapped_type & mapped() const noexcept; + allocator_type get_allocator() const; + explicit operator bool() const noexcept; + bool empty() const noexcept; + void swap(node_handle &) noexcept(nator_traits::propagate_on_container_swap::value||nator_traits::is_always_equal::value)); + node_pointer release() noexcept; + node_pointer get() const noexcept; + nallocator_type & node_alloc() noexcept; + const nallocator_type & node_alloc() const noexcept; };
        -

        Description

        +

        Description

        A node_handle is an object that accepts ownership of a single element from an associative container. It may be used to transfer that ownership to another container with compatible nodes. Containers with compatible nodes have the same node handle type. Elements may be transferred in either direction between container types in the same row:.

        Container types with compatible nodes

        map<K, T, C1, A> <-> map<K, T, C2, A>

        @@ -77,113 +77,113 @@

        set<K, C1, A> <-> multiset<K, C2, A>

        If a node handle is not empty, then it contains an allocator that is equal to the allocator of the container when the element was extracted. If a node handle is empty, it contains no allocator.

        -

        +

        node_handle public construct/copy/destruct

        1. -
          node_handle() noexcept;
          +
          node_handle() noexcept;

          Effects: Initializes m_ptr to nullptr.

          Postcondition: this->empty()

        2. -
          node_handle(node_pointer p, const nallocator_type & al) noexcept;
          +
          node_handle(node_pointer p, const nallocator_type & al) noexcept;

          Effects: Constructs a node_handle object initializing internal pointer with p. If p != nullptr copy constructs internal allocator from al.

        3. template<typename KeyMapped2> 
          -  node_handle(node_handle< NodeAllocator, KeyMapped2 > && nh, unspecified = 0) noexcept;
          + node_handle(node_handle< NodeAllocator, KeyMapped2 > && nh, unspecified = 0) noexcept;

          Effects: Constructs a node_handle object initializing internal pointer with a related nh's internal pointer and assigns nullptr to the later. If nh's internal pointer was not nullptr, move constructs internal allocator with nh's internal allocator and destroy nh's internal allocator.

          Postcondition: nh.empty()

          Note: Two node_handle's are related if only one of KeyMapped template parameter of a node handle is void.

        4. -
          node_handle(node_handle && nh) noexcept;
          +
          node_handle(node_handle && nh) noexcept;

          Effects: Constructs a node_handle object initializing internal pointer with nh's internal pointer and assigns nullptr to the later. If nh's internal pointer was not nullptr, move constructs internal allocator with nh's internal allocator and destroy nh's internal allocator.

          Postcondition: nh.empty()

        5. -
          node_handle & operator=(node_handle && nh) noexcept;
          +
          node_handle & operator=(node_handle && nh) noexcept;

          Requires: Either this->empty(), or nator_traits::propagate_on_container_move_assignment is true, or node_alloc() == nh.node_alloc().

          Effects: If m_ptr != nullptr, destroys the value_type subobject in the container_node_type object pointed to by m_ptr by calling nator_traits::destroy, then deallocates m_ptr by calling nator_traits::deallocate. Assigns nh.m_ptr to m_ptr. If this->empty() or nator_traits::propagate_on_container_move_assignment is true, move assigns nh.node_alloc() to node_alloc(). Assigns nullptr to nh.m_ptr and assigns nullopt to nh.node_alloc().

          Returns: *this.

          Throws: Nothing.

        6. -
          ~node_handle();
          +
          ~node_handle();

          Effects: If !this->empty(), destroys the value_type subobject in the container_node_type object pointed to by c by calling allocator_traits<impl_defined>::destroy, then deallocates m_ptr by calling nator_traits::rebind_traits<container_node_type>::deallocate.

        -

        -node_handle friend functions

        +

        +node_handle friend functions

        1. -
          friend void swap(node_handle & x, node_handle & y) noexcept(BOOST_NOEXCEPT(x.swap(y))));
          +
          friend void swap(node_handle & x, node_handle & y) noexcept(BOOST_NOEXCEPT(x.swap(y))));

          Effects: x.swap(y).

        -

        -node_handle public member functions

        +

        +node_handle public member functions

        1. -
          value_type & value() const noexcept;
          +
          value_type & value() const noexcept;

          Requires: empty() == false.

          Returns: A reference to the value_type subobject in the container_node_type object pointed to by m_ptr

          Throws: Nothing.

        2. -
          key_type & key() const noexcept;
          +
          key_type & key() const noexcept;

          Requires: empty() == false.

          Returns: A non-const reference to the key_type member of the value_type subobject in the container_node_type object pointed to by m_ptr.

          Throws: Nothing.

          Requires: Modifying the key through the returned reference is permitted.

        3. -
          mapped_type & mapped() const noexcept;
          +
          mapped_type & mapped() const noexcept;

          Requires: empty() == false.

          Returns: A reference to the mapped_type member of the value_type subobject in the container_node_type object pointed to by m_ptr

          Throws: Nothing.

        4. -
          allocator_type get_allocator() const;
          +
          allocator_type get_allocator() const;

          Requires: empty() == false.

          Returns: A copy of the internally hold allocator.

          Throws: Nothing.

        5. -
          explicit operator bool() const noexcept;
          +
          explicit operator bool() const noexcept;

          Returns: m_ptr != nullptr.

        6. -
          bool empty() const noexcept;
          +
          bool empty() const noexcept;

          Returns: m_ptr == nullptr.

        7. -
          void swap(node_handle & nh) noexcept(nator_traits::propagate_on_container_swap::value||nator_traits::is_always_equal::value));
          +
          void swap(node_handle & nh) noexcept(nator_traits::propagate_on_container_swap::value||nator_traits::is_always_equal::value));

          Requires: this->empty(), or nh.empty(), or nator_traits::propagate_on_container_swap is true, or node_alloc() == nh.node_alloc().

          Effects: Calls swap(m_ptr, nh.m_ptr). If this->empty(), or nh.empty(), or nator_traits::propagate_on_- container_swap is true calls swap(node_alloc(), nh.node_alloc()).

        8. -
          node_pointer release() noexcept;
          +
          node_pointer release() noexcept;

          Effects: If this->empty() returns nullptr, otherwise returns m_ptr resets m_ptr to nullptr and destroys the internal allocator.

          Postcondition: this->empty()

          Note: Non-standard extensions

        9. -
          node_pointer get() const noexcept;
          +
          node_pointer get() const noexcept;

          Effects: Returns m_ptr.

          Note: Non-standard extensions

        10. -
          nallocator_type & node_alloc() noexcept;
          +
          nallocator_type & node_alloc() noexcept;

          Effects: Returns a reference to the internal node allocator.

          Note: Non-standard extensions

        11. -
          const nallocator_type & node_alloc() const noexcept;
          +
          const nallocator_type & node_alloc() const noexcept;

          Effects: Returns a reference to the internal node allocator.

          Note: Non-standard extensions

        12. diff --git a/doc/html/boost/container/operator___idp44937568.html b/doc/html/boost/container/operator___idp44937568.html deleted file mode 100644 index 1706ccf36f..0000000000 --- a/doc/html/boost/container/operator___idp44937568.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Function template operator== - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Function template operator==

          -

          boost::container::operator== — Checks if contents of two static_vectors are equal.

          -
          -

          Synopsis

          -
          // In header: <boost/container/static_vector.hpp>
          -
          -
          -template<typename V, std::size_t C1, std::size_t C2> 
          -  bool operator==(static_vector< V, C1 > const & x, 
          -                  static_vector< V, C2 > const & y);
          -
          -

          Description

          -

          - -

          -

          Complexity. Linear O(N).

          -

          -

          -
          ---- - - - - - - - - - - -

          Parameters:

          ---- - - - - - - - - - - -

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if containers have the same size and elements in both containers are equal.

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/operator___idp44947584.html b/doc/html/boost/container/operator___idp44947584.html deleted file mode 100644 index 69c14c5c9b..0000000000 --- a/doc/html/boost/container/operator___idp44947584.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Function template operator!= - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Function template operator!=

          -

          boost::container::operator!= — Checks if contents of two static_vectors are not equal.

          -
          -

          Synopsis

          -
          // In header: <boost/container/static_vector.hpp>
          -
          -
          -template<typename V, std::size_t C1, std::size_t C2> 
          -  bool operator!=(static_vector< V, C1 > const & x, 
          -                  static_vector< V, C2 > const & y);
          -
          -

          Description

          -

          - -

          -

          Complexity. Linear O(N).

          -

          -

          -
          ---- - - - - - - - - - - -

          Parameters:

          ---- - - - - - - - - - - -

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if containers have different size or elements in both containers are not equal.

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/operator___idp44977584.html b/doc/html/boost/container/operator___idp44977584.html deleted file mode 100644 index a376180fc5..0000000000 --- a/doc/html/boost/container/operator___idp44977584.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Function template operator<= - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Function template operator<=

          -

          boost::container::operator<= — Lexicographically compares static_vectors.

          -
          -

          Synopsis

          -
          // In header: <boost/container/static_vector.hpp>
          -
          -
          -template<typename V, std::size_t C1, std::size_t C2> 
          -  bool operator<=(static_vector< V, C1 > const & x, 
          -                  static_vector< V, C2 > const & y);
          -
          -

          Description

          -

          - -

          -

          Complexity. Linear O(N).

          -

          -

          -
          ---- - - - - - - - - - - -

          Parameters:

          ---- - - - - - - - - - - -

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if y don't compare lexicographically less than x.

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/operator___idp44987568.html b/doc/html/boost/container/operator___idp44987568.html deleted file mode 100644 index ca5a9ee639..0000000000 --- a/doc/html/boost/container/operator___idp44987568.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Function template operator>= - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Function template operator>=

          -

          boost::container::operator>= — Lexicographically compares static_vectors.

          -
          -

          Synopsis

          -
          // In header: <boost/container/static_vector.hpp>
          -
          -
          -template<typename V, std::size_t C1, std::size_t C2> 
          -  bool operator>=(static_vector< V, C1 > const & x, 
          -                  static_vector< V, C2 > const & y);
          -
          -

          Description

          -

          - -

          -

          Complexity. Linear O(N).

          -

          -

          -
          ---- - - - - - - - - - - -

          Parameters:

          ---- - - - - - - - - - - -

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if x don't compare lexicographically less than y.

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/operator___idp66288880.html b/doc/html/boost/container/operator___idp66288880.html new file mode 100644 index 0000000000..a98fe62e6d --- /dev/null +++ b/doc/html/boost/container/operator___idp66288880.html @@ -0,0 +1,93 @@ + + + + +Function template operator== + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Function template operator==

          +

          boost::container::operator== — Checks if contents of two static_vectors are equal.

          +
          +

          Synopsis

          +
          // In header: <boost/container/static_vector.hpp>
          +
          +
          +template<typename V, std::size_t C1, std::size_t C2> 
          +  bool operator==(static_vector< V, C1 > const & x, 
          +                  static_vector< V, C2 > const & y);
          +
          +

          Description

          +

          + +

          +

          Complexity. Linear O(N).

          +

          +

          +
          ++++ + + + + + + + + + + +

          Parameters:

          ++++ + + + + + + + + + + +

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if containers have the same size and elements in both containers are equal.

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/operator___idp66298896.html b/doc/html/boost/container/operator___idp66298896.html new file mode 100644 index 0000000000..f63222f36c --- /dev/null +++ b/doc/html/boost/container/operator___idp66298896.html @@ -0,0 +1,93 @@ + + + + +Function template operator!= + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Function template operator!=

          +

          boost::container::operator!= — Checks if contents of two static_vectors are not equal.

          +
          +

          Synopsis

          +
          // In header: <boost/container/static_vector.hpp>
          +
          +
          +template<typename V, std::size_t C1, std::size_t C2> 
          +  bool operator!=(static_vector< V, C1 > const & x, 
          +                  static_vector< V, C2 > const & y);
          +
          +

          Description

          +

          + +

          +

          Complexity. Linear O(N).

          +

          +

          +
          ++++ + + + + + + + + + + +

          Parameters:

          ++++ + + + + + + + + + + +

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if containers have different size or elements in both containers are not equal.

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/operator___idp66328896.html b/doc/html/boost/container/operator___idp66328896.html new file mode 100644 index 0000000000..0f65976f6a --- /dev/null +++ b/doc/html/boost/container/operator___idp66328896.html @@ -0,0 +1,93 @@ + + + + +Function template operator<= + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Function template operator<=

          +

          boost::container::operator<= — Lexicographically compares static_vectors.

          +
          +

          Synopsis

          +
          // In header: <boost/container/static_vector.hpp>
          +
          +
          +template<typename V, std::size_t C1, std::size_t C2> 
          +  bool operator<=(static_vector< V, C1 > const & x, 
          +                  static_vector< V, C2 > const & y);
          +
          +

          Description

          +

          + +

          +

          Complexity. Linear O(N).

          +

          +

          +
          ++++ + + + + + + + + + + +

          Parameters:

          ++++ + + + + + + + + + + +

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if y don't compare lexicographically less than x.

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/operator___idp66338880.html b/doc/html/boost/container/operator___idp66338880.html new file mode 100644 index 0000000000..a312b2af7f --- /dev/null +++ b/doc/html/boost/container/operator___idp66338880.html @@ -0,0 +1,93 @@ + + + + +Function template operator>= + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Function template operator>=

          +

          boost::container::operator>= — Lexicographically compares static_vectors.

          +
          +

          Synopsis

          +
          // In header: <boost/container/static_vector.hpp>
          +
          +
          +template<typename V, std::size_t C1, std::size_t C2> 
          +  bool operator>=(static_vector< V, C1 > const & x, 
          +                  static_vector< V, C2 > const & y);
          +
          +

          Description

          +

          + +

          +

          Complexity. Linear O(N).

          +

          +

          +
          ++++ + + + + + + + + + + +

          Parameters:

          ++++ + + + + + + + + + + +

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if x don't compare lexicographically less than y.

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/operator_idp44957616.html b/doc/html/boost/container/operator_idp44957616.html deleted file mode 100644 index 08c221e368..0000000000 --- a/doc/html/boost/container/operator_idp44957616.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Function template operator< - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Function template operator<

          -

          boost::container::operator< — Lexicographically compares static_vectors.

          -
          -

          Synopsis

          -
          // In header: <boost/container/static_vector.hpp>
          -
          -
          -template<typename V, std::size_t C1, std::size_t C2> 
          -  bool operator<(static_vector< V, C1 > const & x, 
          -                 static_vector< V, C2 > const & y);
          -
          -

          Description

          -

          - -

          -

          Complexity. Linear O(N).

          -

          -

          -
          ---- - - - - - - - - - - -

          Parameters:

          ---- - - - - - - - - - - -

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if x compares lexicographically less than y.

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/operator_idp44967600.html b/doc/html/boost/container/operator_idp44967600.html deleted file mode 100644 index ad4fea7dd9..0000000000 --- a/doc/html/boost/container/operator_idp44967600.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - -Function template operator> - - - - - - - - - - - - - - - -
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          -
          -
          -PrevUpHomeNext -
          -
          -
          -
          -

          Function template operator>

          -

          boost::container::operator> — Lexicographically compares static_vectors.

          -
          -

          Synopsis

          -
          // In header: <boost/container/static_vector.hpp>
          -
          -
          -template<typename V, std::size_t C1, std::size_t C2> 
          -  bool operator>(static_vector< V, C1 > const & x, 
          -                 static_vector< V, C2 > const & y);
          -
          -

          Description

          -

          - -

          -

          Complexity. Linear O(N).

          -

          -

          -
          ---- - - - - - - - - - - -

          Parameters:

          ---- - - - - - - - - - - -

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if y compares lexicographically less than x.

          -
          -
          - - - -
          -
          -
          -PrevUpHomeNext -
          - - diff --git a/doc/html/boost/container/operator_idp66308928.html b/doc/html/boost/container/operator_idp66308928.html new file mode 100644 index 0000000000..07cfdc4488 --- /dev/null +++ b/doc/html/boost/container/operator_idp66308928.html @@ -0,0 +1,93 @@ + + + + +Function template operator< + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Function template operator<

          +

          boost::container::operator< — Lexicographically compares static_vectors.

          +
          +

          Synopsis

          +
          // In header: <boost/container/static_vector.hpp>
          +
          +
          +template<typename V, std::size_t C1, std::size_t C2> 
          +  bool operator<(static_vector< V, C1 > const & x, 
          +                 static_vector< V, C2 > const & y);
          +
          +

          Description

          +

          + +

          +

          Complexity. Linear O(N).

          +

          +

          +
          ++++ + + + + + + + + + + +

          Parameters:

          ++++ + + + + + + + + + + +

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if x compares lexicographically less than y.

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/operator_idp66318912.html b/doc/html/boost/container/operator_idp66318912.html new file mode 100644 index 0000000000..07047c698a --- /dev/null +++ b/doc/html/boost/container/operator_idp66318912.html @@ -0,0 +1,93 @@ + + + + +Function template operator> + + + + + + + + + + + + + + + +
          Boost C++ LibrariesHomeLibrariesPeopleFAQMore
          +
          +
          +PrevUpHomeNext +
          +
          +
          +
          +

          Function template operator>

          +

          boost::container::operator> — Lexicographically compares static_vectors.

          +
          +

          Synopsis

          +
          // In header: <boost/container/static_vector.hpp>
          +
          +
          +template<typename V, std::size_t C1, std::size_t C2> 
          +  bool operator>(static_vector< V, C1 > const & x, 
          +                 static_vector< V, C2 > const & y);
          +
          +

          Description

          +

          + +

          +

          Complexity. Linear O(N).

          +

          +

          +
          ++++ + + + + + + + + + + +

          Parameters:

          ++++ + + + + + + + + + + +

          x

          The first static_vector.

          y

          The second static_vector.

          Returns:

          true if y compares lexicographically less than x.

          +
          +
          + + + +
          +
          +
          +PrevUpHomeNext +
          + + diff --git a/doc/html/boost/container/optimize_size.html b/doc/html/boost/container/optimize_size.html index 44109018f5..3c0293f20c 100644 --- a/doc/html/boost/container/optimize_size.html +++ b/doc/html/boost/container/optimize_size.html @@ -36,7 +36,7 @@ struct optimize_size { };
        -

        Description

        +

        Description

        This option setter specifies if node size is optimized storing rebalancing data masked into pointers for ordered associative containers

        diff --git a/doc/html/boost/container/ordered_range.html b/doc/html/boost/container/ordered_range.html index f6bc537c45..a377a4d2f2 100644 --- a/doc/html/boost/container/ordered_range.html +++ b/doc/html/boost/container/ordered_range.html @@ -34,7 +34,7 @@ static const ordered_range_t ordered_range;
        -

        Description

        +

        Description

        Value used to tag that the input range is guaranteed to be ordered

      diff --git a/doc/html/boost/container/ordered_range_t.html b/doc/html/boost/container/ordered_range_t.html index 8807912db5..9abab1f16c 100644 --- a/doc/html/boost/container/ordered_range_t.html +++ b/doc/html/boost/container/ordered_range_t.html @@ -36,7 +36,7 @@ struct ordered_range_t { };
      -

      Description

      +

      Description

      Type used to tag that the input range is guaranteed to be ordered

      diff --git a/doc/html/boost/container/ordered_unique_range.html b/doc/html/boost/container/ordered_unique_range.html index dcf5aafb62..a872341200 100644 --- a/doc/html/boost/container/ordered_unique_range.html +++ b/doc/html/boost/container/ordered_unique_range.html @@ -34,7 +34,7 @@ static const ordered_unique_range_t ordered_unique_range;
    -

    Description

    +

    Description

    Value used to tag that the input range is guaranteed to be ordered and unique

    diff --git a/doc/html/boost/container/ordered_unique_range_t.html b/doc/html/boost/container/ordered_unique_range_t.html index 177802304d..678cca9c83 100644 --- a/doc/html/boost/container/ordered_unique_range_t.html +++ b/doc/html/boost/container/ordered_unique_range_t.html @@ -36,7 +36,7 @@ struct ordered_unique_range_t : public boost::container::ordered_range_t { };
    -

    Description

    +

    Description

    Type used to tag that the input range is guaranteed to be ordered and unique

    diff --git a/doc/html/boost/container/pmr/basic_string_of.html b/doc/html/boost/container/pmr/basic_string_of.html index aff6b51414..7b8ff67594 100644 --- a/doc/html/boost/container/pmr/basic_string_of.html +++ b/doc/html/boost/container/pmr/basic_string_of.html @@ -38,7 +38,7 @@ typedef boost::container::basic_string< CharT, Traits, polymorphic_allocator< CharT > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a basic_string that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/deque_of.html b/doc/html/boost/container/pmr/deque_of.html index 393b06d4d2..c3291ff021 100644 --- a/doc/html/boost/container/pmr/deque_of.html +++ b/doc/html/boost/container/pmr/deque_of.html @@ -38,7 +38,7 @@ typedef boost::container::deque< T, polymorphic_allocator< T > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a deque that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/flat_map_of.html b/doc/html/boost/container/pmr/flat_map_of.html index 4aab8c1bda..bc4698ad17 100644 --- a/doc/html/boost/container/pmr/flat_map_of.html +++ b/doc/html/boost/container/pmr/flat_map_of.html @@ -39,7 +39,7 @@ typedef boost::container::flat_map< Key, T, Compare, polymorphic_allocator< std::pair< Key, T > > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a flat_map that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/flat_multimap_of.html b/doc/html/boost/container/pmr/flat_multimap_of.html index e678fa531e..b1b0428fd5 100644 --- a/doc/html/boost/container/pmr/flat_multimap_of.html +++ b/doc/html/boost/container/pmr/flat_multimap_of.html @@ -39,7 +39,7 @@ typedef boost::container::flat_multimap< Key, T, Compare, polymorphic_allocator< std::pair< Key, T > > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a flat_multimap that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/flat_multiset_of.html b/doc/html/boost/container/pmr/flat_multiset_of.html index 947dacd57b..554730335b 100644 --- a/doc/html/boost/container/pmr/flat_multiset_of.html +++ b/doc/html/boost/container/pmr/flat_multiset_of.html @@ -39,7 +39,7 @@ typedef boost::container::flat_multiset< Key, Compare, polymorphic_allocator< Key > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a flat_multiset that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/flat_set_of.html b/doc/html/boost/container/pmr/flat_set_of.html index db855e172b..5b08a37692 100644 --- a/doc/html/boost/container/pmr/flat_set_of.html +++ b/doc/html/boost/container/pmr/flat_set_of.html @@ -39,7 +39,7 @@ typedef boost::container::flat_set< Key, Compare, polymorphic_allocator< Key > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a flat_set that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/get_default_resource.html b/doc/html/boost/container/pmr/get_default_resource.html index 5a21397c95..c0af62b223 100644 --- a/doc/html/boost/container/pmr/get_default_resource.html +++ b/doc/html/boost/container/pmr/get_default_resource.html @@ -35,7 +35,7 @@ memory_resource * get_default_resource();
    -

    Description

    +

    Description

    Returns: The current value of the default memory resource pointer.

    diff --git a/doc/html/boost/container/pmr/list_of.html b/doc/html/boost/container/pmr/list_of.html index decfed5169..5fab6a4540 100644 --- a/doc/html/boost/container/pmr/list_of.html +++ b/doc/html/boost/container/pmr/list_of.html @@ -38,7 +38,7 @@ typedef boost::container::list< T, polymorphic_allocator< T > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a list that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/map_of.html b/doc/html/boost/container/pmr/map_of.html index 5af412b65b..f1499d09bc 100644 --- a/doc/html/boost/container/pmr/map_of.html +++ b/doc/html/boost/container/pmr/map_of.html @@ -39,7 +39,7 @@ typedef boost::container::map< Key, T, Compare, polymorphic_allocator< std::pair< const Key, T > >, Options > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a map that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/memory_resource.html b/doc/html/boost/container/pmr/memory_resource.html index 6eed23e6de..430768531d 100644 --- a/doc/html/boost/container/pmr/memory_resource.html +++ b/doc/html/boost/container/pmr/memory_resource.html @@ -36,90 +36,90 @@ class memory_resource { public: // construct/copy/destruct - ~memory_resource(); + ~memory_resource(); - // public member functions - void * allocate(std::size_t, std::size_t = max_align); - void deallocate(void *, std::size_t, std::size_t = max_align); - bool is_equal(const memory_resource &) const noexcept; + // public member functions + void * allocate(std::size_t, std::size_t = max_align); + void deallocate(void *, std::size_t, std::size_t = max_align); + bool is_equal(const memory_resource &) const noexcept; - // friend functions - friend bool operator==(const memory_resource &, const memory_resource &) noexcept; - friend bool operator!=(const memory_resource &, const memory_resource &) noexcept; + // friend functions + friend bool operator==(const memory_resource &, const memory_resource &) noexcept; + friend bool operator!=(const memory_resource &, const memory_resource &) noexcept; - // protected member functions - virtual void * do_allocate(std::size_t, std::size_t) = 0; - virtual void do_deallocate(void *, std::size_t, std::size_t) = 0; - virtual bool do_is_equal(const memory_resource &) const = 0; + // protected member functions + virtual void * do_allocate(std::size_t, std::size_t) = 0; + virtual void do_deallocate(void *, std::size_t, std::size_t) = 0; + virtual bool do_is_equal(const memory_resource &) const = 0; // public data members static constexpr std::size_t max_align; };
    -

    Description

    +

    Description

    The memory_resource class is an abstract interface to an unbounded set of classes encapsulating memory resources.

    -

    +

    memory_resource public construct/copy/destruct

    1. -
      ~memory_resource();
      +
      ~memory_resource();

      Effects: Destroys this memory_resource.

    -

    -memory_resource public member functions

    +

    +memory_resource public member functions

    1. -
      void * allocate(std::size_t bytes, std::size_t alignment = max_align);
      +
      void * allocate(std::size_t bytes, std::size_t alignment = max_align);

      Effects: Equivalent to return do_allocate(bytes, alignment);

    2. -
      void deallocate(void * p, std::size_t bytes, 
      +
      void deallocate(void * p, std::size_t bytes, 
                       std::size_t alignment = max_align);

      Effects: Equivalent to return do_deallocate(bytes, alignment);

    3. -
      bool is_equal(const memory_resource & other) const noexcept;
      +
      bool is_equal(const memory_resource & other) const noexcept;

      Effects: Equivalent to return return do_is_equal(other);

    -

    -memory_resource friend functions

    +

    +memory_resource friend functions

    1. -
      friend bool operator==(const memory_resource & a, const memory_resource & b) noexcept;
      +
      friend bool operator==(const memory_resource & a, const memory_resource & b) noexcept;

      Returns: &a == &b || a.is_equal(b).

    2. -
      friend bool operator!=(const memory_resource & a, const memory_resource & b) noexcept;
      +
      friend bool operator!=(const memory_resource & a, const memory_resource & b) noexcept;

      Returns: !(a == b).

    -

    -memory_resource protected member functions

    +

    +memory_resource protected member functions

    1. -
      virtual void * do_allocate(std::size_t bytes, std::size_t alignment) = 0;
      +
      virtual void * do_allocate(std::size_t bytes, std::size_t alignment) = 0;

      Requires: Alignment shall be a power of two.

      Returns: A derived class shall implement this function to return a pointer to allocated storage with a size of at least bytes. The returned storage is aligned to the specified alignment, if such alignment is supported; otherwise it is aligned to max_align.

      Throws: A derived class implementation shall throw an appropriate exception if it is unable to allocate memory with the requested size and alignment.

    2. virtual void 
      -do_deallocate(void * p, std::size_t bytes, std::size_t alignment) = 0;
      +do_deallocate(void * p, std::size_t bytes, std::size_t alignment) = 0;

      Requires: p shall have been returned from a prior call to allocate(bytes, alignment) on a memory resource equal to *this, and the storage at p shall not yet have been deallocated.

      Effects: A derived class shall implement this function to dispose of allocated storage.

      Throws: Nothing.

    3. -
      virtual bool do_is_equal(const memory_resource & other) const = 0;
      +
      virtual bool do_is_equal(const memory_resource & other) const = 0;

      Returns: A derived class shall implement this function to return true if memory allocated from this can be deallocated from other and vice-versa; otherwise it shall return false. [Note: The most-derived type of other might not match the type of this. For a derived class, D, a typical implementation of this function will compute dynamic_cast<const D*>(&other) and go no further (i.e., return false) if it returns nullptr. - end note].

    diff --git a/doc/html/boost/container/pmr/monotonic_buffer_resource.html b/doc/html/boost/container/pmr/monotonic_buffer_resource.html index 5249452590..55fc765682 100644 --- a/doc/html/boost/container/pmr/monotonic_buffer_resource.html +++ b/doc/html/boost/container/pmr/monotonic_buffer_resource.html @@ -38,32 +38,32 @@ { public: // construct/copy/destruct - explicit monotonic_buffer_resource(memory_resource * = 0) noexcept; - explicit monotonic_buffer_resource(std::size_t, memory_resource * = 0) noexcept; - monotonic_buffer_resource(void *, std::size_t, memory_resource * = 0) noexcept; - monotonic_buffer_resource(const monotonic_buffer_resource &) = delete; + explicit monotonic_buffer_resource(memory_resource * = 0) noexcept; + explicit monotonic_buffer_resource(std::size_t, memory_resource * = 0) noexcept; + monotonic_buffer_resource(void *, std::size_t, memory_resource * = 0) noexcept; + monotonic_buffer_resource(const monotonic_buffer_resource &) = delete; monotonic_buffer_resource - operator=(const monotonic_buffer_resource &) = delete; - ~monotonic_buffer_resource(); + operator=(const monotonic_buffer_resource &) = delete; + ~monotonic_buffer_resource(); - // public member functions - void release() noexcept; - memory_resource * upstream_resource() const noexcept; - std::size_t remaining_storage(std::size_t, std::size_t &) const noexcept; - std::size_t remaining_storage(std::size_t = 1u) const noexcept; - const void * current_buffer() const noexcept; - std::size_t next_buffer_size() const noexcept; + // public member functions + void release() noexcept; + memory_resource * upstream_resource() const noexcept; + std::size_t remaining_storage(std::size_t, std::size_t &) const noexcept; + std::size_t remaining_storage(std::size_t = 1u) const noexcept; + const void * current_buffer() const noexcept; + std::size_t next_buffer_size() const noexcept; - // protected member functions - virtual void * do_allocate(std::size_t, std::size_t); - virtual void do_deallocate(void *, std::size_t, std::size_t) noexcept; - virtual bool do_is_equal(const memory_resource &) const noexcept; + // protected member functions + virtual void * do_allocate(std::size_t, std::size_t); + virtual void do_deallocate(void *, std::size_t, std::size_t) noexcept; + virtual bool do_is_equal(const memory_resource &) const noexcept; // public data members static const std::size_t initial_next_buffer_size; };
    -

    Description

    +

    Description

    A monotonic_buffer_resource is a special-purpose memory resource intended for very fast memory allocations in situations where memory is used to build up a few objects and then is released all at once when the memory resource object is destroyed. It has the following qualities:

    • A call to deallocate has no effect, thus the amount of memory consumed increases monotonically until the resource is destroyed.

    • @@ -75,97 +75,97 @@

      -

      +

      monotonic_buffer_resource public construct/copy/destruct

      1. -
        explicit monotonic_buffer_resource(memory_resource * upstream = 0) noexcept;
        +
        explicit monotonic_buffer_resource(memory_resource * upstream = 0) noexcept;

        Requires: upstream shall be the address of a valid memory resource or nullptr

        Effects: If upstream is not nullptr, sets the internal resource to upstream, to get_default_resource() otherwise. Sets the internal current_buffer to nullptr and the internal next_buffer_size to an implementation-defined size.

      2. -
        explicit monotonic_buffer_resource(std::size_t initial_size, 
        +
        explicit monotonic_buffer_resource(std::size_t initial_size, 
                                            memory_resource * upstream = 0) noexcept;

        Requires: upstream shall be the address of a valid memory resource or nullptr and initial_size shall be greater than zero.

        Effects: If upstream is not nullptr, sets the internal resource to upstream, to get_default_resource() otherwise. Sets the internal current_buffer to nullptr and next_buffer_size to at least initial_size.

      3. -
        monotonic_buffer_resource(void * buffer, std::size_t buffer_size, 
        +
        monotonic_buffer_resource(void * buffer, std::size_t buffer_size, 
                                   memory_resource * upstream = 0) noexcept;

        Requires: upstream shall be the address of a valid memory resource or nullptr, buffer_size shall be no larger than the number of bytes in buffer.

        Effects: If upstream is not nullptr, sets the internal resource to upstream, to get_default_resource() otherwise. Sets the internal current_buffer to buffer, and next_buffer_size to buffer_size (but not less than an implementation-defined size), then increases next_buffer_size by an implementation-defined growth factor (which need not be integral).

      4. -
      5. monotonic_buffer_resource(const monotonic_buffer_resource &) = delete;
      6. +
      7. monotonic_buffer_resource(const monotonic_buffer_resource &) = delete;
      8. monotonic_buffer_resource 
        -operator=(const monotonic_buffer_resource &) = delete;
      9. +operator=(const monotonic_buffer_resource &) = delete;
      10. -
        ~monotonic_buffer_resource();
        +
        ~monotonic_buffer_resource();

        Effects: Calls this->release().

      -

      -monotonic_buffer_resource public member functions

      +

      +monotonic_buffer_resource public member functions

      1. -
        void release() noexcept;
        +
        void release() noexcept;

        Effects: upstream_resource()->deallocate() as necessary to release all allocated memory. [Note: memory is released back to upstream_resource() even if some blocks that were allocated from this have not been deallocated from this. - end note]

      2. -
        memory_resource * upstream_resource() const noexcept;
        +
        memory_resource * upstream_resource() const noexcept;

        Returns: The value of the internal resource.

      3. -
        std::size_t remaining_storage(std::size_t alignment, 
        +
        std::size_t remaining_storage(std::size_t alignment, 
                                       std::size_t & wasted_due_to_alignment) const noexcept;

        Returns: The number of bytes of storage available for the specified alignment and the number of bytes wasted due to the requested alignment.

        Note: Non-standard extension.

      4. -
        std::size_t remaining_storage(std::size_t alignment = 1u) const noexcept;
        +
        std::size_t remaining_storage(std::size_t alignment = 1u) const noexcept;

        Returns: The number of bytes of storage available for the specified alignment.

        Note: Non-standard extension.

      5. -
        const void * current_buffer() const noexcept;
        +
        const void * current_buffer() const noexcept;

        Returns: The number of bytes of storage available for the specified alignment.

        Note: Non-standard extension.

      6. -
        std::size_t next_buffer_size() const noexcept;
        +
        std::size_t next_buffer_size() const noexcept;

        Returns: The number of bytes that will be requested for the next buffer once the current one is exhausted.

        Note: Non-standard extension.

      -

      -monotonic_buffer_resource protected member functions

      +

      +monotonic_buffer_resource protected member functions

      1. -
        virtual void * do_allocate(std::size_t bytes, std::size_t alignment);
        +
        virtual void * do_allocate(std::size_t bytes, std::size_t alignment);

        Returns: A pointer to allocated storage with a size of at least bytes. The size and alignment of the allocated memory shall meet the requirements for a class derived from memory_resource.

        Effects: If the unused space in the internal current_buffer can fit a block with the specified bytes and alignment, then allocate the return block from the internal current_buffer; otherwise sets the internal current_buffer to upstream_resource()->allocate(n, m), where n is not less than max(bytes, next_buffer_size) and m is not less than alignment, and increase next_buffer_size by an implementation-defined growth factor (which need not be integral), then allocate the return block from the newly-allocated internal current_buffer.

        Throws: Nothing unless upstream_resource()->allocate() throws.

      2. virtual void 
        -do_deallocate(void * p, std::size_t bytes, std::size_t alignment) noexcept;
        +do_deallocate(void * p, std::size_t bytes, std::size_t alignment) noexcept;

        Effects: None

        Throws: Nothing

        Remarks: Memory used by this resource increases monotonically until its destruction.

      3. -
        virtual bool do_is_equal(const memory_resource & other) const noexcept;
        +
        virtual bool do_is_equal(const memory_resource & other) const noexcept;

        Returns: this == dynamic_cast<const monotonic_buffer_resource*>(&other).

      -

      +

      monotonic_buffer_resource public public data members

      diff --git a/doc/html/boost/container/pmr/multimap_of.html b/doc/html/boost/container/pmr/multimap_of.html index a1df51ef83..a33f66111d 100644 --- a/doc/html/boost/container/pmr/multimap_of.html +++ b/doc/html/boost/container/pmr/multimap_of.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@

      -PrevUpHomeNext +PrevUpHomeNext
      @@ -39,7 +39,7 @@ typedef boost::container::multimap< Key, T, Compare, polymorphic_allocator< std::pair< const Key, T > >, Options > type; };
      -

      Description

      +

      Description

      A portable metafunction to obtain a multimap that uses a polymorphic allocator

      @@ -53,7 +53,7 @@
      -PrevUpHomeNext +PrevUpHomeNext
      diff --git a/doc/html/boost/container/pmr/multiset_of.html b/doc/html/boost/container/pmr/multiset_of.html index 2f5c624b7d..e6b6de5935 100644 --- a/doc/html/boost/container/pmr/multiset_of.html +++ b/doc/html/boost/container/pmr/multiset_of.html @@ -39,7 +39,7 @@ typedef boost::container::multiset< Key, Compare, polymorphic_allocator< Key >, Options > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a multiset that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/new_delete_resource.html b/doc/html/boost/container/pmr/new_delete_resource.html index 812d36c043..11dd59ef08 100644 --- a/doc/html/boost/container/pmr/new_delete_resource.html +++ b/doc/html/boost/container/pmr/new_delete_resource.html @@ -35,7 +35,7 @@ memory_resource * new_delete_resource();
    -

    Description

    +

    Description

    Returns: A pointer to a static-duration object of a type derived from memory_resource that can serve as a resource for allocating memory using global operator new and global operator delete. The same value is returned every time this function is called. For return value p and memory resource r, p->is_equal(r) returns &r == p.

    diff --git a/doc/html/boost/container/pmr/null_memory_resource.html b/doc/html/boost/container/pmr/null_memory_resource.html index be04e53daa..55ba914418 100644 --- a/doc/html/boost/container/pmr/null_memory_resource.html +++ b/doc/html/boost/container/pmr/null_memory_resource.html @@ -35,7 +35,7 @@ memory_resource * null_memory_resource();
    -

    Description

    +

    Description

    Returns: A pointer to a static-duration object of a type derived from memory_resource for which allocate() always throws bad_alloc and for which deallocate() has no effect. The same value is returned every time this function is called. For return value p and memory resource r, p->is_equal(r) returns &r == p.

    diff --git a/doc/html/boost/container/pmr/operator__.html b/doc/html/boost/container/pmr/operator__.html new file mode 100644 index 0000000000..7c1bdc446e --- /dev/null +++ b/doc/html/boost/container/pmr/operator__.html @@ -0,0 +1,57 @@ + + + + +Function template operator!= + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    +
    +
    +

    Function template operator!=

    +

    boost::container::pmr::operator!=

    +
    +

    Synopsis

    +
    // In header: <boost/container/pmr/polymorphic_allocator.hpp>
    +
    +
    +template<typename T1, typename T2> 
    +  bool operator!=(const polymorphic_allocator< T1 > & a, 
    +                  const polymorphic_allocator< T2 > & b);
    +
    +

    Description

    +

    Returns: ! (a == b).

    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/boost/container/pmr/operator___idp42065856.html b/doc/html/boost/container/pmr/operator___idp42065856.html deleted file mode 100644 index 21691b67c7..0000000000 --- a/doc/html/boost/container/pmr/operator___idp42065856.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - -Function template operator== - - - - - - - - - - - - - - - -
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    -
    -
    -PrevUpHomeNext -
    -
    -
    -
    -

    Function template operator==

    -

    boost::container::pmr::operator==

    -
    -

    Synopsis

    -
    // In header: <boost/container/pmr/polymorphic_allocator.hpp>
    -
    -
    -template<typename T1, typename T2> 
    -  bool operator==(const polymorphic_allocator< T1 > & a, 
    -                  const polymorphic_allocator< T2 > & b);
    -
    -

    Description

    -

    Returns: *a.resource() == *b.resource().

    -
    -
    - - - -
    -
    -
    -PrevUpHomeNext -
    - - diff --git a/doc/html/boost/container/pmr/operator___idp42071824.html b/doc/html/boost/container/pmr/operator___idp42071824.html deleted file mode 100644 index e2ed3b616c..0000000000 --- a/doc/html/boost/container/pmr/operator___idp42071824.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - -Function template operator!= - - - - - - - - - - - - - - - -
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    -
    -
    -PrevUpHomeNext -
    -
    -
    -
    -

    Function template operator!=

    -

    boost::container::pmr::operator!=

    -
    -

    Synopsis

    -
    // In header: <boost/container/pmr/polymorphic_allocator.hpp>
    -
    -
    -template<typename T1, typename T2> 
    -  bool operator!=(const polymorphic_allocator< T1 > & a, 
    -                  const polymorphic_allocator< T2 > & b);
    -
    -

    Description

    -

    Returns: ! (a == b).

    -
    -
    - - - -
    -
    -
    -PrevUpHomeNext -
    - - diff --git a/doc/html/boost/container/pmr/polymorphic_allocator.html b/doc/html/boost/container/pmr/polymorphic_allocator.html index a318d5731a..b7de3a747c 100644 --- a/doc/html/boost/container/pmr/polymorphic_allocator.html +++ b/doc/html/boost/container/pmr/polymorphic_allocator.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@

    -PrevUpHomeNext +PrevUpHomeNext
    @@ -39,86 +39,86 @@ typedef T value_type; // construct/copy/destruct - polymorphic_allocator() noexcept; - polymorphic_allocator(memory_resource *); - polymorphic_allocator(const polymorphic_allocator &); + polymorphic_allocator() noexcept; + polymorphic_allocator(memory_resource *); + polymorphic_allocator(const polymorphic_allocator &); template<typename U> - polymorphic_allocator(const polymorphic_allocator< U > &) noexcept; - polymorphic_allocator & operator=(const polymorphic_allocator &); + polymorphic_allocator(const polymorphic_allocator< U > &) noexcept; + polymorphic_allocator & operator=(const polymorphic_allocator &); - // public member functions - T * allocate(size_t); - void deallocate(T *, size_t); - template<typename U, class... Args> void construct(U *, Args &&...); - template<typename U> void destroy(U *); - polymorphic_allocator select_on_container_copy_construction() const; - memory_resource * resource() const; + // public member functions + T * allocate(size_t); + void deallocate(T *, size_t); + template<typename U, class... Args> void construct(U *, Args &&...); + template<typename U> void destroy(U *); + polymorphic_allocator select_on_container_copy_construction() const; + memory_resource * resource() const; };
    -

    Description

    +

    Description

    A specialization of class template polymorphic_allocator conforms to the Allocator requirements. Constructed with different memory resources, different instances of the same specialization of polymorphic_allocator can exhibit entirely different allocation behavior. This runtime polymorphism allows objects that use polymorphic_allocator to behave as if they used different allocator types at run time even though they use the same static allocator type.

    -

    +

    polymorphic_allocator public construct/copy/destruct

    1. -
      polymorphic_allocator() noexcept;
      +
      polymorphic_allocator() noexcept;

      Effects: Sets m_resource to get_default_resource().

    2. -
      polymorphic_allocator(memory_resource * r);
      +
      polymorphic_allocator(memory_resource * r);

      Requires: r is non-null.

      Effects: Sets m_resource to r.

      Throws: Nothing

      Notes: This constructor provides an implicit conversion from memory_resource*. Non-standard extension: if r is null m_resource is set to get_default_resource().

    3. -
      polymorphic_allocator(const polymorphic_allocator & other);
      +
      polymorphic_allocator(const polymorphic_allocator & other);

      Effects: Sets m_resource to other.resource().

    4. template<typename U> 
      -  polymorphic_allocator(const polymorphic_allocator< U > & other) noexcept;
      + polymorphic_allocator(const polymorphic_allocator< U > & other) noexcept;

      Effects: Sets m_resource to other.resource().

    5. -
      polymorphic_allocator & operator=(const polymorphic_allocator & other);
      +
      polymorphic_allocator & operator=(const polymorphic_allocator & other);

      Effects: Sets m_resource to other.resource().

    -

    -polymorphic_allocator public member functions

    +

    +polymorphic_allocator public member functions

    1. -
      T * allocate(size_t n);
      +
      T * allocate(size_t n);

      Returns: Equivalent to static_cast<T*>(m_resource->allocate(n * sizeof(T), alignof(T))).

    2. -
      void deallocate(T * p, size_t n);
      +
      void deallocate(T * p, size_t n);

      Requires: p was allocated from a memory resource, x, equal to *m_resource, using x.allocate(n * sizeof(T), alignof(T)).

      Effects: Equivalent to m_resource->deallocate(p, n * sizeof(T), alignof(T)).

      Throws: Nothing.

    3. -
      template<typename U, class... Args> void construct(U * p, Args &&... args);
      -

      Requires: Uses-allocator construction of T with allocator this->resource() and constructor arguments std::forward<Args>(args)... is well-formed. [Note: uses-allocator construction is always well formed for types that do not use allocators. - end note]

      -

      Effects: Construct a T object at p by uses-allocator construction with allocator this->resource() and constructor arguments std::forward<Args>(args)....

      +
      template<typename U, class... Args> void construct(U * p, Args &&... args);
      +

      Requires: Uses-allocator construction of T with allocator *this and constructor arguments std::forward<Args>(args)... is well-formed. [Note: uses-allocator construction is always well formed for types that do not use allocators. - end note]

      +

      Effects: Construct a T object at p by uses-allocator construction with allocator *this and constructor arguments std::forward<Args>(args)....

      Throws: Nothing unless the constructor for T throws.

    4. -
      template<typename U> void destroy(U * p);
      +
      template<typename U> void destroy(U * p);

      Effects: p->~U().

    5. -
      polymorphic_allocator select_on_container_copy_construction() const;
      +
      polymorphic_allocator select_on_container_copy_construction() const;

      Returns: Equivalent to polymorphic_allocator().

    6. -
      memory_resource * resource() const;
      +
      memory_resource * resource() const;

      Returns: m_resource.

    @@ -135,7 +135,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost/container/pmr/pool_options.html b/doc/html/boost/container/pmr/pool_options.html index 9f5fa36247..892b56a383 100644 --- a/doc/html/boost/container/pmr/pool_options.html +++ b/doc/html/boost/container/pmr/pool_options.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -35,14 +35,14 @@ struct pool_options { // construct/copy/destruct - pool_options(); + pool_options(); // public data members std::size_t max_blocks_per_chunk; std::size_t largest_required_pool_block; };
    -

    Description

    +

    Description

    The members of pool_options comprise a set of constructor options for pool resources. The effect of each option on the pool resource behavior is described below:

    • std::size_t max_blocks_per_chunk: The maximum number of blocks that will be allocated at once from the upstream memory resource to replenish a pool. If the value of max_blocks_per_chunk is zero or is greater than an implementation-defined limit, that limit is used instead. The implementation may choose to use a smaller value than is specified in this field and may use different values for different pools.

    • @@ -51,11 +51,11 @@

      -

      +

      pool_options public construct/copy/destruct

      -
      1. pool_options();
      +
      1. pool_options();
    @@ -69,7 +69,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost/container/pmr/resource_adaptor.html b/doc/html/boost/container/pmr/resource_adaptor.html index f0c8a314d9..80e955ec24 100644 --- a/doc/html/boost/container/pmr/resource_adaptor.html +++ b/doc/html/boost/container/pmr/resource_adaptor.html @@ -35,7 +35,7 @@ typedef resource_adaptor_imp< typename allocator_traits< Allocator >::template rebind_alloc< char > > resource_adaptor;
    -

    Description

    +

    Description

    resource_adaptor<Allocator> is rendered as an alias to resource_adaptor_imp class template such that Allocator is rebound to a char value type.

    diff --git a/doc/html/boost/container/pmr/resource_adaptor_imp.html b/doc/html/boost/container/pmr/resource_adaptor_imp.html index 6a4ddd5144..344c98f579 100644 --- a/doc/html/boost/container/pmr/resource_adaptor_imp.html +++ b/doc/html/boost/container/pmr/resource_adaptor_imp.html @@ -39,25 +39,25 @@ typedef Allocator allocator_type; // construct/copy/destruct - resource_adaptor_imp(); - resource_adaptor_imp(const resource_adaptor_imp &); - resource_adaptor_imp(resource_adaptor_imp &&); - explicit resource_adaptor_imp(const Allocator &); - explicit resource_adaptor_imp(Allocator &&); - resource_adaptor_imp & operator=(const resource_adaptor_imp &); - resource_adaptor_imp & operator=(resource_adaptor_imp &&); + resource_adaptor_imp(); + resource_adaptor_imp(const resource_adaptor_imp &); + resource_adaptor_imp(resource_adaptor_imp &&); + explicit resource_adaptor_imp(const Allocator &); + explicit resource_adaptor_imp(Allocator &&); + resource_adaptor_imp & operator=(const resource_adaptor_imp &); + resource_adaptor_imp & operator=(resource_adaptor_imp &&); - // public member functions - allocator_type & get_allocator(); - const allocator_type & get_allocator() const; + // public member functions + allocator_type & get_allocator(); + const allocator_type & get_allocator() const; - // protected member functions - virtual void * do_allocate(size_t, size_t); - virtual void do_deallocate(void *, size_t, size_t); - virtual bool do_is_equal(const memory_resource &) const noexcept; + // protected member functions + virtual void * do_allocate(size_t, size_t); + virtual void do_deallocate(void *, size_t, size_t); + virtual bool do_is_equal(const memory_resource &) const noexcept; };
    -

    Description

    +

    Description

    An instance of resource_adaptor<Allocator> is an adaptor that wraps a memory_resource interface around Allocator. In order that resource_adaptor<X<T>> and resource_adaptor<X<U>> are the same type for any allocator template X and types T and U, resource_adaptor<Allocator> is rendered as an alias to this class template such that Allocator is rebound to a char value type in every specialization of the class template. The requirements on this class template are defined below. In addition to the Allocator requirements, the parameter to resource_adaptor shall meet the following additional requirements:

    • typename allocator_traits<Allocator>:: pointer shall be identical to typename allocator_traits<Allocator>:: value_type*.

    • @@ -68,68 +68,68 @@

      -

      +

      resource_adaptor_imp public construct/copy/destruct

      1. -
        resource_adaptor_imp();
        +
        resource_adaptor_imp();

        Effects: Default constructs m_alloc.

      2. -
        resource_adaptor_imp(const resource_adaptor_imp & other);
        +
        resource_adaptor_imp(const resource_adaptor_imp & other);

        Effects: Copy constructs m_alloc.

      3. -
        resource_adaptor_imp(resource_adaptor_imp && other);
        +
        resource_adaptor_imp(resource_adaptor_imp && other);

        Effects: Move constructs m_alloc.

      4. -
        explicit resource_adaptor_imp(const Allocator & a2);
        +
        explicit resource_adaptor_imp(const Allocator & a2);

        Effects: Initializes m_alloc with a2.

      5. -
        explicit resource_adaptor_imp(Allocator && a2);
        +
        explicit resource_adaptor_imp(Allocator && a2);

        Effects: Initializes m_alloc with a2.

      6. -
        resource_adaptor_imp & operator=(const resource_adaptor_imp & other);
        +
        resource_adaptor_imp & operator=(const resource_adaptor_imp & other);

        Effects: Copy assigns m_alloc.

      7. -
        resource_adaptor_imp & operator=(resource_adaptor_imp && other);
        +
        resource_adaptor_imp & operator=(resource_adaptor_imp && other);

        Effects: Move assigns m_alloc.

      -

      -resource_adaptor_imp public member functions

      +

      +resource_adaptor_imp public member functions

      1. -
        allocator_type & get_allocator();
        +
        allocator_type & get_allocator();
        Effects: Returns m_alloc.
      2. -
        const allocator_type & get_allocator() const;
        +
        const allocator_type & get_allocator() const;
        Effects: Returns m_alloc.
      -

      -resource_adaptor_imp protected member functions

      +

      +resource_adaptor_imp protected member functions

      1. -
        virtual void * do_allocate(size_t bytes, size_t alignment);
        +
        virtual void * do_allocate(size_t bytes, size_t alignment);

        Returns: Allocated memory obtained by calling m_alloc.allocate. The size and alignment of the allocated memory shall meet the requirements for a class derived from memory_resource.

      2. -
        virtual void do_deallocate(void * p, size_t bytes, size_t alignment);
        +
        virtual void do_deallocate(void * p, size_t bytes, size_t alignment);

        Requires: p was previously allocated using A.allocate, where A == m_alloc, and not subsequently deallocated.

        Effects: Returns memory to the allocator using m_alloc.deallocate().

      3. -
        virtual bool do_is_equal(const memory_resource & other) const noexcept;
        +
        virtual bool do_is_equal(const memory_resource & other) const noexcept;

        Let p be dynamic_cast<const resource_adaptor_imp*>(&other).

        Returns: false if p is null, otherwise the value of m_alloc == p->m_alloc.

      4. diff --git a/doc/html/boost/container/pmr/set_default_resource.html b/doc/html/boost/container/pmr/set_default_resource.html index 2ebc2bc4b6..5d28450e4f 100644 --- a/doc/html/boost/container/pmr/set_default_resource.html +++ b/doc/html/boost/container/pmr/set_default_resource.html @@ -35,7 +35,7 @@ memory_resource * set_default_resource(memory_resource * r);
      -

      Description

      +

      Description

      Effects: If r is non-null, sets the value of the default memory resource pointer to r, otherwise sets the default memory resource pointer to new_delete_resource().

      Postconditions: get_default_resource() == r.

      Returns: The previous value of the default memory resource pointer.

      diff --git a/doc/html/boost/container/pmr/set_of.html b/doc/html/boost/container/pmr/set_of.html index 7b8fa9aadf..ed24b978f4 100644 --- a/doc/html/boost/container/pmr/set_of.html +++ b/doc/html/boost/container/pmr/set_of.html @@ -39,7 +39,7 @@ typedef boost::container::set< Key, Compare, polymorphic_allocator< Key >, Options > type; };
      -

      Description

      +

      Description

      A portable metafunction to obtain a set that uses a polymorphic allocator

      diff --git a/doc/html/boost/container/pmr/slist_of.html b/doc/html/boost/container/pmr/slist_of.html index c6663242d3..5e7decbb58 100644 --- a/doc/html/boost/container/pmr/slist_of.html +++ b/doc/html/boost/container/pmr/slist_of.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@
      -PrevUpHomeNext +PrevUpHomeNext
      @@ -38,7 +38,7 @@ typedef boost::container::slist< T, polymorphic_allocator< T > > type; };
      -

      Description

      +

      Description

      A portable metafunction to obtain a slist that uses a polymorphic allocator

    @@ -52,7 +52,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost/container/pmr/small_vector_of.html b/doc/html/boost/container/pmr/small_vector_of.html index 4f45dc14b9..5ee9af3ae8 100644 --- a/doc/html/boost/container/pmr/small_vector_of.html +++ b/doc/html/boost/container/pmr/small_vector_of.html @@ -38,7 +38,7 @@ typedef boost::container::small_vector< T, N, polymorphic_allocator< T > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a small_vector that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/stable_vector_of.html b/doc/html/boost/container/pmr/stable_vector_of.html index d67b94376c..d2de967bd4 100644 --- a/doc/html/boost/container/pmr/stable_vector_of.html +++ b/doc/html/boost/container/pmr/stable_vector_of.html @@ -38,7 +38,7 @@ typedef boost::container::stable_vector< T, polymorphic_allocator< T > > type; };
    -

    Description

    +

    Description

    A portable metafunction to obtain a stable_vector that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/pmr/synchronized_pool_resource.html b/doc/html/boost/container/pmr/synchronized_pool_resource.html index 040bf9310c..16617dc2d0 100644 --- a/doc/html/boost/container/pmr/synchronized_pool_resource.html +++ b/doc/html/boost/container/pmr/synchronized_pool_resource.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@

    -PrevUpHomeNext +PrevUpHomeNext
    @@ -38,32 +38,32 @@ { public: // construct/copy/destruct - synchronized_pool_resource(const pool_options &, memory_resource *) noexcept; - synchronized_pool_resource() noexcept; - explicit synchronized_pool_resource(memory_resource *) noexcept; - explicit synchronized_pool_resource(const pool_options &) noexcept; - synchronized_pool_resource(const synchronized_pool_resource &) = delete; + synchronized_pool_resource(const pool_options &, memory_resource *) noexcept; + synchronized_pool_resource() noexcept; + explicit synchronized_pool_resource(memory_resource *) noexcept; + explicit synchronized_pool_resource(const pool_options &) noexcept; + synchronized_pool_resource(const synchronized_pool_resource &) = delete; synchronized_pool_resource - operator=(const synchronized_pool_resource &) = delete; - ~synchronized_pool_resource(); + operator=(const synchronized_pool_resource &) = delete; + ~synchronized_pool_resource(); - // public member functions - void release(); - memory_resource * upstream_resource() const; - pool_options options() const; - std::size_t pool_count() const; - std::size_t pool_index(std::size_t) const; - std::size_t pool_next_blocks_per_chunk(std::size_t) const; - std::size_t pool_block(std::size_t) const; - std::size_t pool_cached_blocks(std::size_t) const; + // public member functions + void release(); + memory_resource * upstream_resource() const; + pool_options options() const; + std::size_t pool_count() const; + std::size_t pool_index(std::size_t) const; + std::size_t pool_next_blocks_per_chunk(std::size_t) const; + std::size_t pool_block(std::size_t) const; + std::size_t pool_cached_blocks(std::size_t) const; - // protected member functions - virtual void * do_allocate(std::size_t, std::size_t); - virtual void do_deallocate(void *, std::size_t, std::size_t); - virtual bool do_is_equal(const memory_resource &) const noexcept; + // protected member functions + virtual void * do_allocate(std::size_t, std::size_t); + virtual void do_deallocate(void *, std::size_t, std::size_t); + virtual bool do_is_equal(const memory_resource &) const noexcept; };
    -

    Description

    +

    Description

    A synchronized_pool_resource is a general-purpose memory resources having the following qualities:

    • Each resource owns the allocated memory, and frees it on destruction, even if deallocate has not been called for some of the allocated blocks.

    • @@ -76,79 +76,79 @@

      A synchronized_pool_resource may be accessed from multiple threads without external synchronization and may have thread-specific pools to reduce synchronization costs.

      -

      +

      synchronized_pool_resource public construct/copy/destruct

      1. -
        synchronized_pool_resource(const pool_options & opts, 
        +
        synchronized_pool_resource(const pool_options & opts, 
                                    memory_resource * upstream) noexcept;

        Requires: upstream is the address of a valid memory resource.

        Effects: Constructs a pool resource object that will obtain memory from upstream whenever the pool resource is unable to satisfy a memory request from its own internal data structures. The resulting object will hold a copy of upstream, but will not own the resource to which upstream points. [ Note: The intention is that calls to upstream->allocate() will be substantially fewer than calls to this->allocate() in most cases. - end note The behavior of the pooling mechanism is tuned according to the value of the opts argument.

        Throws: Nothing unless upstream->allocate() throws. It is unspecified if or under what conditions this constructor calls upstream->allocate().

      2. -
        synchronized_pool_resource() noexcept;
        -

        Effects: Same as unsynchronized_pool_resource(pool_options(), get_default_resource()).

        +
        synchronized_pool_resource() noexcept;
        +

        Effects: Same as unsynchronized_pool_resource(pool_options(), get_default_resource()).

      3. -
        explicit synchronized_pool_resource(memory_resource * upstream) noexcept;
        +
        explicit synchronized_pool_resource(memory_resource * upstream) noexcept;

        Effects: Same as unsynchronized_pool_resource(pool_options(), upstream).

      4. -
        explicit synchronized_pool_resource(const pool_options & opts) noexcept;
        +
        explicit synchronized_pool_resource(const pool_options & opts) noexcept;

        Effects: Same as unsynchronized_pool_resource(opts, get_default_resource()).

      5. -
      6. synchronized_pool_resource(const synchronized_pool_resource &) = delete;
      7. +
      8. synchronized_pool_resource(const synchronized_pool_resource &) = delete;
      9. synchronized_pool_resource 
        -operator=(const synchronized_pool_resource &) = delete;
      10. +operator=(const synchronized_pool_resource &) = delete;
      11. -
        ~synchronized_pool_resource();
        +
        ~synchronized_pool_resource();

        Effects: Calls this->release().

      -

      -synchronized_pool_resource public member functions

      +

      +synchronized_pool_resource public member functions

      1. -
        void release();
        +
        void release();

        Effects: Calls Calls upstream_resource()->deallocate() as necessary to release all allocated memory. [ Note: memory is released back to upstream_resource() even if deallocate has not been called for some of the allocated blocks. - end note ]

      2. -
        memory_resource * upstream_resource() const;
        +
        memory_resource * upstream_resource() const;

        Returns: The value of the upstream argument provided to the constructor of this object.

      3. -
        pool_options options() const;
        +
        pool_options options() const;

        Returns: The options that control the pooling behavior of this resource. The values in the returned struct may differ from those supplied to the pool resource constructor in that values of zero will be replaced with implementation-defined defaults and sizes may be rounded to unspecified granularity.

      4. -
        std::size_t pool_count() const;
        +
        std::size_t pool_count() const;

        Returns: The number of pools that will be used in the pool resource.

        Note: Non-standard extension.

      5. -
        std::size_t pool_index(std::size_t bytes) const;
        +
        std::size_t pool_index(std::size_t bytes) const;

        Returns: The index of the pool that will be used to serve the allocation of bytes. Returns pool_count() if bytes is bigger than options().largest_required_pool_block (no pool will be used to serve this).

        Note: Non-standard extension.

      6. -
        std::size_t pool_next_blocks_per_chunk(std::size_t pool_idx) const;
        +
        std::size_t pool_next_blocks_per_chunk(std::size_t pool_idx) const;

        Requires: pool_idx < pool_index()

        Returns: The number blocks that will be allocated in the next chunk from the pool specified by pool_idx.

        Note: Non-standard extension.

      7. -
        std::size_t pool_block(std::size_t pool_idx) const;
        +
        std::size_t pool_block(std::size_t pool_idx) const;

        Requires: pool_idx < pool_index()

        Returns: The number of bytes of the block that the specified pool_idx pool manages.

        Note: Non-standard extension.

      8. -
        std::size_t pool_cached_blocks(std::size_t pool_idx) const;
        +
        std::size_t pool_cached_blocks(std::size_t pool_idx) const;

        Requires: pool_idx < pool_index()

        Returns: The number of blocks that the specified pool_idx pool has cached and will be served without calling the upstream_allocator.

        Note: Non-standard extension.

        @@ -156,22 +156,22 @@
      -

      -synchronized_pool_resource protected member functions

      +

      +synchronized_pool_resource protected member functions

      1. -
        virtual void * do_allocate(std::size_t bytes, std::size_t alignment);
        +
        virtual void * do_allocate(std::size_t bytes, std::size_t alignment);

        Returns: A pointer to allocated storage with a size of at least bytes. The size and alignment of the allocated memory shall meet the requirements for a class derived from memory_resource.

        Effects: If the pool selected for a block of size bytes is unable to satisfy the memory request from its own internal data structures, it will call upstream_resource()->allocate() to obtain more memory. If bytes is larger than that which the largest pool can handle, then memory will be allocated using upstream_resource()->allocate().

        Throws: Nothing unless upstream_resource()->allocate() throws.

      2. -
        virtual void do_deallocate(void * p, std::size_t bytes, std::size_t alignment);
        +
        virtual void do_deallocate(void * p, std::size_t bytes, std::size_t alignment);

        Effects: Return the memory at p to the pool. It is unspecified if or under what circumstances this operation will result in a call to upstream_resource()->deallocate().

        Throws: Nothing.

      3. -
        virtual bool do_is_equal(const memory_resource & other) const noexcept;
        +
        virtual bool do_is_equal(const memory_resource & other) const noexcept;

        Returns: this == dynamic_cast<const unsynchronized_pool_resource*>(&other).

      @@ -188,7 +188,7 @@
      -PrevUpHomeNext +PrevUpHomeNext
      diff --git a/doc/html/boost/container/pmr/unsynchronized_idp42230704.html b/doc/html/boost/container/pmr/unsynchronized_idp42230704.html deleted file mode 100644 index 6d2dfcdc01..0000000000 --- a/doc/html/boost/container/pmr/unsynchronized_idp42230704.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - -Class unsynchronized_pool_resource - - - - - - - - - - - - - - - -
      Boost C++ LibrariesHomeLibrariesPeopleFAQMore
      -
      -
      -PrevUpHomeNext -
      -
      -
      -
      -

      Class unsynchronized_pool_resource

      -

      boost::container::pmr::unsynchronized_pool_resource

      -
      -

      Synopsis

      -
      // In header: <boost/container/pmr/unsynchronized_pool_resource.hpp>
      -
      -
      -class unsynchronized_pool_resource :
      -  public boost::container::pmr::memory_resource
      -{
      -public:
      -  // construct/copy/destruct
      -  unsynchronized_pool_resource(const pool_options &, memory_resource *) noexcept;
      -  unsynchronized_pool_resource() noexcept;
      -  explicit unsynchronized_pool_resource(memory_resource *) noexcept;
      -  explicit unsynchronized_pool_resource(const pool_options &) noexcept;
      -  unsynchronized_pool_resource(const unsynchronized_pool_resource &) = delete;
      -  unsynchronized_pool_resource 
      -  operator=(const unsynchronized_pool_resource &) = delete;
      -  ~unsynchronized_pool_resource();
      -
      -  // public member functions
      -  void release();
      -  memory_resource * upstream_resource() const;
      -  pool_options options() const;
      -  std::size_t pool_count() const;
      -  std::size_t pool_index(std::size_t) const;
      -  std::size_t pool_next_blocks_per_chunk(std::size_t) const;
      -  std::size_t pool_block(std::size_t) const;
      -  std::size_t pool_cached_blocks(std::size_t) const;
      -
      -  // protected member functions
      -  virtual void * do_allocate(std::size_t, std::size_t);
      -  virtual void do_deallocate(void *, std::size_t, std::size_t);
      -  virtual bool do_is_equal(const memory_resource &) const noexcept;
      -};
      -
      -

      Description

      -

      A unsynchronized_pool_resource is a general-purpose memory resources having the following qualities:

      -
        -
      • Each resource owns the allocated memory, and frees it on destruction, even if deallocate has not been called for some of the allocated blocks.

      • -
      • A pool resource consists of a collection of pools, serving requests for different block sizes. Each individual pool manages a collection of chunks that are in turn divided into blocks of uniform size, returned via calls to do_allocate. Each call to do_allocate(size, alignment) is dispatched to the pool serving the smallest blocks accommodating at least size bytes.

      • -
      • When a particular pool is exhausted, allocating a block from that pool results in the allocation of an additional chunk of memory from the upstream allocator (supplied at construction), thus replenishing the pool. With each successive replenishment, the chunk size obtained increases geometrically. [ Note: By allocating memory in chunks, the pooling strategy increases the chance that consecutive allocations will be close together in memory. - end note ]

      • -
      • Allocation requests that exceed the largest block size of any pool are fulfilled directly from the upstream allocator.

      • -
      • A pool_options struct may be passed to the pool resource constructors to tune the largest block size and the maximum chunk size.

      • -
      -

      -

      -

      An unsynchronized_pool_resource class may not be accessed from multiple threads simultaneously and thus avoids the cost of synchronization entirely in single-threaded applications.

      -
      -

      -unsynchronized_pool_resource - public - construct/copy/destruct

      -
        -
      1. -
        unsynchronized_pool_resource(const pool_options & opts, 
        -                             memory_resource * upstream) noexcept;
        -

        Requires: upstream is the address of a valid memory resource.

        -

        Effects: Constructs a pool resource object that will obtain memory from upstream whenever the pool resource is unable to satisfy a memory request from its own internal data structures. The resulting object will hold a copy of upstream, but will not own the resource to which upstream points. [ Note: The intention is that calls to upstream->allocate() will be substantially fewer than calls to this->allocate() in most cases. - end note The behavior of the pooling mechanism is tuned according to the value of the opts argument.

        -

        Throws: Nothing unless upstream->allocate() throws. It is unspecified if or under what conditions this constructor calls upstream->allocate().

        -
      2. -
      3. -
        unsynchronized_pool_resource() noexcept;
        -

        Effects: Same as unsynchronized_pool_resource(pool_options(), get_default_resource()).

        -
      4. -
      5. -
        explicit unsynchronized_pool_resource(memory_resource * upstream) noexcept;
        -

        Effects: Same as unsynchronized_pool_resource(pool_options(), upstream).

        -
      6. -
      7. -
        explicit unsynchronized_pool_resource(const pool_options & opts) noexcept;
        -

        Effects: Same as unsynchronized_pool_resource(opts, get_default_resource()).

        -
      8. -
      9. unsynchronized_pool_resource(const unsynchronized_pool_resource &) = delete;
      10. -
      11. unsynchronized_pool_resource 
        -operator=(const unsynchronized_pool_resource &) = delete;
      12. -
      13. -
        ~unsynchronized_pool_resource();
        -

        Effects: Calls this->release().

        -
      14. -
      -
      -
      -

      -unsynchronized_pool_resource public member functions

      -
        -
      1. -
        void release();
        -

        Effects: Calls Calls upstream_resource()->deallocate() as necessary to release all allocated memory. [ Note: memory is released back to upstream_resource() even if deallocate has not been called for some of the allocated blocks. - end note ]

        -
      2. -
      3. -
        memory_resource * upstream_resource() const;
        -

        Returns: The value of the upstream argument provided to the constructor of this object.

        -
      4. -
      5. -
        pool_options options() const;
        -

        Returns: The options that control the pooling behavior of this resource. The values in the returned struct may differ from those supplied to the pool resource constructor in that values of zero will be replaced with implementation-defined defaults and sizes may be rounded to unspecified granularity.

        -
      6. -
      7. -
        std::size_t pool_count() const;
        -

        Returns: The number of pools that will be used in the pool resource.

        -

        Note: Non-standard extension.

        -
      8. -
      9. -
        std::size_t pool_index(std::size_t bytes) const;
        -

        Returns: The index of the pool that will be used to serve the allocation of bytes. Returns pool_count() if bytes is bigger than options().largest_required_pool_block (no pool will be used to serve this).

        -

        Note: Non-standard extension.

        -
      10. -
      11. -
        std::size_t pool_next_blocks_per_chunk(std::size_t pool_idx) const;
        -

        Requires: pool_idx < pool_index()

        -

        Returns: The number blocks that will be allocated in the next chunk from the pool specified by pool_idx.

        -

        Note: Non-standard extension.

        -
      12. -
      13. -
        std::size_t pool_block(std::size_t pool_idx) const;
        -

        Requires: pool_idx < pool_index()

        -

        Returns: The number of bytes of the block that the specified pool_idx pool manages.

        -

        Note: Non-standard extension.

        -
      14. -
      15. -
        std::size_t pool_cached_blocks(std::size_t pool_idx) const;
        -

        Requires: pool_idx < pool_index()

        -

        Returns: The number of blocks that the specified pool_idx pool has cached and will be served without calling the upstream_allocator.

        -

        Note: Non-standard extension.

        -
      16. -
      -
      -
      -

      -unsynchronized_pool_resource protected member functions

      -
        -
      1. -
        virtual void * do_allocate(std::size_t bytes, std::size_t alignment);
        -

        Returns: A pointer to allocated storage with a size of at least bytes. The size and alignment of the allocated memory shall meet the requirements for a class derived from memory_resource.

        -

        Effects: If the pool selected for a block of size bytes is unable to satisfy the memory request from its own internal data structures, it will call upstream_resource()->allocate() to obtain more memory. If bytes is larger than that which the largest pool can handle, then memory will be allocated using upstream_resource()->allocate().

        -

        Throws: Nothing unless upstream_resource()->allocate() throws.

        -
      2. -
      3. -
        virtual void do_deallocate(void * p, std::size_t bytes, std::size_t alignment);
        -

        Effects: Return the memory at p to the pool. It is unspecified if or under what circumstances this operation will result in a call to upstream_resource()->deallocate().

        -

        Throws: Nothing.

        -
      4. -
      5. -
        virtual bool do_is_equal(const memory_resource & other) const noexcept;
        -

        Returns: this == dynamic_cast<const unsynchronized_pool_resource*>(&other).

        -
      6. -
      -
      -
      -
      - - - -
      -
      -
      -PrevUpHomeNext -
      - - diff --git a/doc/html/boost/container/pmr/unsynchronized_idp63576512.html b/doc/html/boost/container/pmr/unsynchronized_idp63576512.html new file mode 100644 index 0000000000..839b263a4a --- /dev/null +++ b/doc/html/boost/container/pmr/unsynchronized_idp63576512.html @@ -0,0 +1,194 @@ + + + + +Class unsynchronized_pool_resource + + + + + + + + + + + + + + + +
      Boost C++ LibrariesHomeLibrariesPeopleFAQMore
      +
      +
      +PrevUpHomeNext +
      +
      +
      +
      +

      Class unsynchronized_pool_resource

      +

      boost::container::pmr::unsynchronized_pool_resource

      +
      +

      Synopsis

      +
      // In header: <boost/container/pmr/unsynchronized_pool_resource.hpp>
      +
      +
      +class unsynchronized_pool_resource :
      +  public boost::container::pmr::memory_resource
      +{
      +public:
      +  // construct/copy/destruct
      +  unsynchronized_pool_resource(const pool_options &, memory_resource *) noexcept;
      +  unsynchronized_pool_resource() noexcept;
      +  explicit unsynchronized_pool_resource(memory_resource *) noexcept;
      +  explicit unsynchronized_pool_resource(const pool_options &) noexcept;
      +  unsynchronized_pool_resource(const unsynchronized_pool_resource &) = delete;
      +  unsynchronized_pool_resource 
      +  operator=(const unsynchronized_pool_resource &) = delete;
      +  ~unsynchronized_pool_resource();
      +
      +  // public member functions
      +  void release();
      +  memory_resource * upstream_resource() const;
      +  pool_options options() const;
      +  std::size_t pool_count() const;
      +  std::size_t pool_index(std::size_t) const;
      +  std::size_t pool_next_blocks_per_chunk(std::size_t) const;
      +  std::size_t pool_block(std::size_t) const;
      +  std::size_t pool_cached_blocks(std::size_t) const;
      +
      +  // protected member functions
      +  virtual void * do_allocate(std::size_t, std::size_t);
      +  virtual void do_deallocate(void *, std::size_t, std::size_t);
      +  virtual bool do_is_equal(const memory_resource &) const noexcept;
      +};
      +
      +

      Description

      +

      A unsynchronized_pool_resource is a general-purpose memory resources having the following qualities:

      +
        +
      • Each resource owns the allocated memory, and frees it on destruction, even if deallocate has not been called for some of the allocated blocks.

      • +
      • A pool resource consists of a collection of pools, serving requests for different block sizes. Each individual pool manages a collection of chunks that are in turn divided into blocks of uniform size, returned via calls to do_allocate. Each call to do_allocate(size, alignment) is dispatched to the pool serving the smallest blocks accommodating at least size bytes.

      • +
      • When a particular pool is exhausted, allocating a block from that pool results in the allocation of an additional chunk of memory from the upstream allocator (supplied at construction), thus replenishing the pool. With each successive replenishment, the chunk size obtained increases geometrically. [ Note: By allocating memory in chunks, the pooling strategy increases the chance that consecutive allocations will be close together in memory. - end note ]

      • +
      • Allocation requests that exceed the largest block size of any pool are fulfilled directly from the upstream allocator.

      • +
      • A pool_options struct may be passed to the pool resource constructors to tune the largest block size and the maximum chunk size.

      • +
      +

      +

      +

      An unsynchronized_pool_resource class may not be accessed from multiple threads simultaneously and thus avoids the cost of synchronization entirely in single-threaded applications.

      +
      +

      +unsynchronized_pool_resource + public + construct/copy/destruct

      +
        +
      1. +
        unsynchronized_pool_resource(const pool_options & opts, 
        +                             memory_resource * upstream) noexcept;
        +

        Requires: upstream is the address of a valid memory resource.

        +

        Effects: Constructs a pool resource object that will obtain memory from upstream whenever the pool resource is unable to satisfy a memory request from its own internal data structures. The resulting object will hold a copy of upstream, but will not own the resource to which upstream points. [ Note: The intention is that calls to upstream->allocate() will be substantially fewer than calls to this->allocate() in most cases. - end note The behavior of the pooling mechanism is tuned according to the value of the opts argument.

        +

        Throws: Nothing unless upstream->allocate() throws. It is unspecified if or under what conditions this constructor calls upstream->allocate().

        +
      2. +
      3. +
        unsynchronized_pool_resource() noexcept;
        +

        Effects: Same as unsynchronized_pool_resource(pool_options(), get_default_resource()).

        +
      4. +
      5. +
        explicit unsynchronized_pool_resource(memory_resource * upstream) noexcept;
        +

        Effects: Same as unsynchronized_pool_resource(pool_options(), upstream).

        +
      6. +
      7. +
        explicit unsynchronized_pool_resource(const pool_options & opts) noexcept;
        +

        Effects: Same as unsynchronized_pool_resource(opts, get_default_resource()).

        +
      8. +
      9. unsynchronized_pool_resource(const unsynchronized_pool_resource &) = delete;
      10. +
      11. unsynchronized_pool_resource 
        +operator=(const unsynchronized_pool_resource &) = delete;
      12. +
      13. +
        ~unsynchronized_pool_resource();
        +

        Effects: Calls this->release().

        +
      14. +
      +
      +
      +

      +unsynchronized_pool_resource public member functions

      +
        +
      1. +
        void release();
        +

        Effects: Calls Calls upstream_resource()->deallocate() as necessary to release all allocated memory. [ Note: memory is released back to upstream_resource() even if deallocate has not been called for some of the allocated blocks. - end note ]

        +
      2. +
      3. +
        memory_resource * upstream_resource() const;
        +

        Returns: The value of the upstream argument provided to the constructor of this object.

        +
      4. +
      5. +
        pool_options options() const;
        +

        Returns: The options that control the pooling behavior of this resource. The values in the returned struct may differ from those supplied to the pool resource constructor in that values of zero will be replaced with implementation-defined defaults and sizes may be rounded to unspecified granularity.

        +
      6. +
      7. +
        std::size_t pool_count() const;
        +

        Returns: The number of pools that will be used in the pool resource.

        +

        Note: Non-standard extension.

        +
      8. +
      9. +
        std::size_t pool_index(std::size_t bytes) const;
        +

        Returns: The index of the pool that will be used to serve the allocation of bytes. Returns pool_count() if bytes is bigger than options().largest_required_pool_block (no pool will be used to serve this).

        +

        Note: Non-standard extension.

        +
      10. +
      11. +
        std::size_t pool_next_blocks_per_chunk(std::size_t pool_idx) const;
        +

        Requires: pool_idx < pool_index()

        +

        Returns: The number blocks that will be allocated in the next chunk from the pool specified by pool_idx.

        +

        Note: Non-standard extension.

        +
      12. +
      13. +
        std::size_t pool_block(std::size_t pool_idx) const;
        +

        Requires: pool_idx < pool_index()

        +

        Returns: The number of bytes of the block that the specified pool_idx pool manages.

        +

        Note: Non-standard extension.

        +
      14. +
      15. +
        std::size_t pool_cached_blocks(std::size_t pool_idx) const;
        +

        Requires: pool_idx < pool_index()

        +

        Returns: The number of blocks that the specified pool_idx pool has cached and will be served without calling the upstream_allocator.

        +

        Note: Non-standard extension.

        +
      16. +
      +
      +
      +

      +unsynchronized_pool_resource protected member functions

      +
        +
      1. +
        virtual void * do_allocate(std::size_t bytes, std::size_t alignment);
        +

        Returns: A pointer to allocated storage with a size of at least bytes. The size and alignment of the allocated memory shall meet the requirements for a class derived from memory_resource.

        +

        Effects: If the pool selected for a block of size bytes is unable to satisfy the memory request from its own internal data structures, it will call upstream_resource()->allocate() to obtain more memory. If bytes is larger than that which the largest pool can handle, then memory will be allocated using upstream_resource()->allocate().

        +

        Throws: Nothing unless upstream_resource()->allocate() throws.

        +
      2. +
      3. +
        virtual void do_deallocate(void * p, std::size_t bytes, std::size_t alignment);
        +

        Effects: Return the memory at p to the pool. It is unspecified if or under what circumstances this operation will result in a call to upstream_resource()->deallocate().

        +

        Throws: Nothing.

        +
      4. +
      5. +
        virtual bool do_is_equal(const memory_resource & other) const noexcept;
        +

        Returns: this == dynamic_cast<const unsynchronized_pool_resource*>(&other).

        +
      6. +
      +
      +
      +
      + + + +
      +
      +
      +PrevUpHomeNext +
      + + diff --git a/doc/html/boost/container/pmr/vector_of.html b/doc/html/boost/container/pmr/vector_of.html index 1fb507f012..6400b9c935 100644 --- a/doc/html/boost/container/pmr/vector_of.html +++ b/doc/html/boost/container/pmr/vector_of.html @@ -38,7 +38,7 @@ typedef boost::container::vector< T, polymorphic_allocator< T > > type; };
      -

      Description

      +

      Description

      A portable metafunction to obtain a vector that uses a polymorphic allocator

    diff --git a/doc/html/boost/container/scoped_allocator_adaptor.html b/doc/html/boost/container/scoped_allocator_adaptor.html index 6c39e726fe..2cee9ded22 100644 --- a/doc/html/boost/container/scoped_allocator_adaptor.html +++ b/doc/html/boost/container/scoped_allocator_adaptor.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -47,9 +47,9 @@ typedef outer_traits_type::const_pointer const_pointer; typedef outer_traits_type::void_pointer void_pointer; typedef outer_traits_type::const_void_pointer const_void_pointer; - typedef base_type::propagate_on_container_copy_assignment propagate_on_container_copy_assignment; - typedef base_type::propagate_on_container_move_assignment propagate_on_container_move_assignment; - typedef base_type::propagate_on_container_swap propagate_on_container_swap; + typedef base_type::propagate_on_container_copy_assignment propagate_on_container_copy_assignment; + typedef base_type::propagate_on_container_move_assignment propagate_on_container_move_assignment; + typedef base_type::propagate_on_container_swap propagate_on_container_swap; typedef base_type::is_always_equal is_always_equal; // member classes/structs/unions @@ -60,45 +60,45 @@ }; // construct/copy/destruct - scoped_allocator_adaptor(); - scoped_allocator_adaptor(const scoped_allocator_adaptor &); - scoped_allocator_adaptor(scoped_allocator_adaptor &&); + scoped_allocator_adaptor(); + scoped_allocator_adaptor(const scoped_allocator_adaptor &); + scoped_allocator_adaptor(scoped_allocator_adaptor &&); template<typename OuterA2> - scoped_allocator_adaptor(OuterA2 &&, const InnerAllocs &...); + scoped_allocator_adaptor(OuterA2 &&, const InnerAllocs &...); template<typename OuterA2> - scoped_allocator_adaptor(const scoped_allocator_adaptor< OuterA2, InnerAllocs...> &); + scoped_allocator_adaptor(const scoped_allocator_adaptor< OuterA2, InnerAllocs...> &); template<typename OuterA2> - scoped_allocator_adaptor(scoped_allocator_adaptor< OuterA2, InnerAllocs...> &&); - scoped_allocator_adaptor & operator=(const scoped_allocator_adaptor &); - scoped_allocator_adaptor & operator=(scoped_allocator_adaptor &&); - ~scoped_allocator_adaptor(); + scoped_allocator_adaptor(scoped_allocator_adaptor< OuterA2, InnerAllocs...> &&); + scoped_allocator_adaptor & operator=(const scoped_allocator_adaptor &); + scoped_allocator_adaptor & operator=(scoped_allocator_adaptor &&); + ~scoped_allocator_adaptor(); - // public member functions - void swap(scoped_allocator_adaptor &); - outer_allocator_type & outer_allocator() noexcept; - const outer_allocator_type & outer_allocator() const noexcept; - inner_allocator_type & inner_allocator() noexcept; - inner_allocator_type const & inner_allocator() const noexcept; - size_type max_size() const noexcept; - template<typename T> void destroy(T *) noexcept; - pointer allocate(size_type); - pointer allocate(size_type, const_void_pointer); - void deallocate(pointer, size_type); - scoped_allocator_adaptor select_on_container_copy_construction() const; - template<typename T, class... Args> void construct(T *, Args &&...); + // public member functions + void swap(scoped_allocator_adaptor &); + outer_allocator_type & outer_allocator() noexcept; + const outer_allocator_type & outer_allocator() const noexcept; + inner_allocator_type & inner_allocator() noexcept; + inner_allocator_type const & inner_allocator() const noexcept; + size_type max_size() const noexcept; + template<typename T> void destroy(T *) noexcept; + pointer allocate(size_type); + pointer allocate(size_type, const_void_pointer); + void deallocate(pointer, size_type); + scoped_allocator_adaptor select_on_container_copy_construction() const; + template<typename T, class... Args> void construct(T *, Args &&...); - // friend functions - friend void swap(scoped_allocator_adaptor &, scoped_allocator_adaptor &); + // friend functions + friend void swap(scoped_allocator_adaptor &, scoped_allocator_adaptor &); };
    -

    Description

    +

    Description

    This class is a C++03-compatible implementation of std::scoped_allocator_adaptor. The class template scoped_allocator_adaptor is an allocator template that specifies the memory resource (the outer allocator) to be used by a container (as any other allocator does) and also specifies an inner allocator resource to be passed to the constructor of every element within the container.

    This adaptor is instantiated with one outer and zero or more inner allocator types. If instantiated with only one allocator type, the inner allocator becomes the scoped_allocator_adaptor itself, thus using the same allocator resource for the container and every element within the container and, if the elements themselves are containers, each of their elements recursively. If instantiated with more than one allocator, the first allocator is the outer allocator for use by the container, the second allocator is passed to the constructors of the container's elements, and, if the elements themselves are containers, the third allocator is passed to the elements' elements, and so on. If containers are nested to a depth greater than the number of allocators, the last allocator is used repeatedly, as in the single-allocator case, for any remaining recursions.

    [Note: The scoped_allocator_adaptor is derived from the outer allocator type so it can be substituted for the outer allocator type in most expressions. -end note]

    In the construct member functions, OUTERMOST(x) is x if x does not have an outer_allocator() member function and OUTERMOST(x.outer_allocator()) otherwise; OUTERMOST_ALLOC_TRAITS(x) is allocator_traits<decltype(OUTERMOST(x))>.

    [Note: OUTERMOST(x) and OUTERMOST_ALLOC_TRAITS(x) are recursive operations. It is incumbent upon the definition of outer_allocator() to ensure that the recursion terminates. It will terminate for all instantiations of scoped_allocator_adaptor. -end note]

    -

    +

    scoped_allocator_adaptor public types

    @@ -115,17 +115,17 @@
  • -typedef base_type::propagate_on_container_copy_assignment propagate_on_container_copy_assignment;

    +typedef base_type::propagate_on_container_copy_assignment propagate_on_container_copy_assignment;

    Type: A type with a constant boolean value == true if allocator_traits<Allocator>:: propagate_on_container_copy_assignment::value is true for any Allocator in the set of OuterAlloc and InnerAllocs..., false otherwise.

  • -typedef base_type::propagate_on_container_move_assignment propagate_on_container_move_assignment;

    +typedef base_type::propagate_on_container_move_assignment propagate_on_container_move_assignment;

    Type: A type with a constant boolean value == true if allocator_traits<Allocator>:: propagate_on_container_move_assignment::value is true for any Allocator in the set of OuterAlloc and InnerAllocs..., false otherwise.

  • -typedef base_type::propagate_on_container_swap propagate_on_container_swap;

    +typedef base_type::propagate_on_container_swap propagate_on_container_swap;

    Type: A type with a constant boolean value == true if allocator_traits<Allocator>:: propagate_on_container_swap::value is true for any Allocator in the set of OuterAlloc and InnerAllocs..., false otherwise.

  • @@ -136,97 +136,97 @@
  • -

    +

    scoped_allocator_adaptor public construct/copy/destruct

    1. -
      scoped_allocator_adaptor();
      +
      scoped_allocator_adaptor();

      Effects: value-initializes the OuterAlloc base class and the inner allocator object.

    2. -
      scoped_allocator_adaptor(const scoped_allocator_adaptor & other);
      +
      scoped_allocator_adaptor(const scoped_allocator_adaptor & other);

      Effects: initializes each allocator within the adaptor with the corresponding allocator from other.

    3. -
      scoped_allocator_adaptor(scoped_allocator_adaptor && other);
      +
      scoped_allocator_adaptor(scoped_allocator_adaptor && other);

      Effects: move constructs each allocator within the adaptor with the corresponding allocator from other.

    4. template<typename OuterA2> 
      -  scoped_allocator_adaptor(OuterA2 && outerAlloc, 
      +  scoped_allocator_adaptor(OuterA2 && outerAlloc, 
                                  const InnerAllocs &... innerAllocs);

      Requires: OuterAlloc shall be constructible from OuterA2.

      Effects: initializes the OuterAlloc base class with boost::forward<OuterA2>(outerAlloc) and inner with innerAllocs...(hence recursively initializing each allocator within the adaptor with the corresponding allocator from the argument list).

    5. template<typename OuterA2> 
      -  scoped_allocator_adaptor(const scoped_allocator_adaptor< OuterA2, InnerAllocs...> & other);
      + scoped_allocator_adaptor(const scoped_allocator_adaptor< OuterA2, InnerAllocs...> & other);

      Requires: OuterAlloc shall be constructible from OuterA2.

      Effects: initializes each allocator within the adaptor with the corresponding allocator from other.

    6. template<typename OuterA2> 
      -  scoped_allocator_adaptor(scoped_allocator_adaptor< OuterA2, InnerAllocs...> && other);
      + scoped_allocator_adaptor(scoped_allocator_adaptor< OuterA2, InnerAllocs...> && other);

      Requires: OuterAlloc shall be constructible from OuterA2.

      Effects: initializes each allocator within the adaptor with the corresponding allocator rvalue from other.

    7. -
    8. scoped_allocator_adaptor & operator=(const scoped_allocator_adaptor & other);
    9. -
    10. scoped_allocator_adaptor & operator=(scoped_allocator_adaptor && other);
    11. -
    12. ~scoped_allocator_adaptor();
    13. +
    14. scoped_allocator_adaptor & operator=(const scoped_allocator_adaptor & other);
    15. +
    16. scoped_allocator_adaptor & operator=(scoped_allocator_adaptor && other);
    17. +
    18. ~scoped_allocator_adaptor();
    -

    -scoped_allocator_adaptor public member functions

    +

    +scoped_allocator_adaptor public member functions

    1. -
      void swap(scoped_allocator_adaptor & r);
      +
      void swap(scoped_allocator_adaptor & r);

      Effects: swaps *this with r.

    2. -
      outer_allocator_type & outer_allocator() noexcept;
      +
      outer_allocator_type & outer_allocator() noexcept;

      Returns: static_cast<OuterAlloc&>(*this).

    3. -
      const outer_allocator_type & outer_allocator() const noexcept;
      +
      const outer_allocator_type & outer_allocator() const noexcept;

      Returns: static_cast<const OuterAlloc&>(*this).

    4. -
      inner_allocator_type & inner_allocator() noexcept;
      +
      inner_allocator_type & inner_allocator() noexcept;

      Returns: *this if sizeof...(InnerAllocs) is zero; otherwise, inner.

    5. -
      inner_allocator_type const & inner_allocator() const noexcept;
      +
      inner_allocator_type const & inner_allocator() const noexcept;

      Returns: *this if sizeof...(InnerAllocs) is zero; otherwise, inner.

    6. -
      size_type max_size() const noexcept;
      +
      size_type max_size() const noexcept;

      Returns: allocator_traits<OuterAlloc>:: max_size(outer_allocator()).

    7. -
      template<typename T> void destroy(T * p) noexcept;
      +
      template<typename T> void destroy(T * p) noexcept;

      Effects: calls OUTERMOST_ALLOC_TRAITS(*this):: destroy(OUTERMOST(*this), p).

    8. -
      pointer allocate(size_type n);
      +
      pointer allocate(size_type n);

      Returns: allocator_traits<OuterAlloc>::allocate(outer_allocator(), n).

    9. -
      pointer allocate(size_type n, const_void_pointer hint);
      +
      pointer allocate(size_type n, const_void_pointer hint);

      Returns: allocator_traits<OuterAlloc>::allocate(outer_allocator(), n, hint).

    10. -
      void deallocate(pointer p, size_type n);
      +
      void deallocate(pointer p, size_type n);

      Effects: allocator_traits<OuterAlloc>::deallocate(outer_allocator(), p, n).

    11. -
      scoped_allocator_adaptor select_on_container_copy_construction() const;
      +
      scoped_allocator_adaptor select_on_container_copy_construction() const;

      Returns: A new scoped_allocator_adaptor object where each allocator Allocator in the adaptor is initialized from the result of calling allocator_traits<Allocator>::select_on_container_copy_construction() on the corresponding allocator in *this.

    12. -
      template<typename T, class... Args> void construct(T * p, Args &&... args);
      +
      template<typename T, class... Args> void construct(T * p, Args &&... args);

      Effects: 1) If uses_allocator<T, inner_allocator_type>::value is false calls OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p, std::forward<Args>(args)...).

      2) Otherwise, if uses_allocator<T, inner_allocator_type>::value is true and is_constructible<T, allocator_arg_t, inner_allocator_type, Args...>:: value is true, calls OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p, allocator_arg, inner_allocator(), std::forward<Args>(args)...).

      [Note: In compilers without advanced decltype SFINAE support, is_constructible can't be implemented so that condition will be replaced by constructible_with_allocator_prefix<T>::value. -end note]

      @@ -238,10 +238,10 @@
    -

    -scoped_allocator_adaptor friend functions

    +

    +scoped_allocator_adaptor friend functions

    1. -
      friend void swap(scoped_allocator_adaptor & l, scoped_allocator_adaptor & r);
      +
      friend void swap(scoped_allocator_adaptor & l, scoped_allocator_adaptor & r);

      Effects: swaps *this with r.

    @@ -257,7 +257,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost/container/scoped_allocator_adaptor/rebind.html b/doc/html/boost/container/scoped_allocator_adaptor/rebind.html index 2e326b4391..d7eb2edea1 100644 --- a/doc/html/boost/container/scoped_allocator_adaptor/rebind.html +++ b/doc/html/boost/container/scoped_allocator_adaptor/rebind.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    @@ -39,7 +39,7 @@ typedef scoped_allocator_adaptor< typename outer_traits_type::template portable_rebind_alloc< U >::type, InnerAllocs...> other; };
    -

    Description

    +

    Description

    Type: Rebinds scoped allocator to typedef scoped_allocator_adaptor < typename outer_traits_type::template portable_rebind_alloc<U>::type , InnerAllocs... >

    @@ -53,7 +53,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost/container/set.html b/doc/html/boost/container/set.html index b2ffc131e8..5333d5a8e4 100644 --- a/doc/html/boost/container/set.html +++ b/doc/html/boost/container/set.html @@ -59,117 +59,117 @@ typedef implementation_defined insert_return_type; // construct/copy/destruct - set() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); - explicit set(const allocator_type &); - explicit set(const Compare &); - set(const Compare &, const allocator_type &); - template<typename InputIterator> set(InputIterator, InputIterator); + set() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value)); + explicit set(const allocator_type &); + explicit set(const Compare &); + set(const Compare &, const allocator_type &); + template<typename InputIterator> set(InputIterator, InputIterator); template<typename InputIterator> - set(InputIterator, InputIterator, const allocator_type &); + set(InputIterator, InputIterator, const allocator_type &); template<typename InputIterator> - set(InputIterator, InputIterator, const Compare &); + set(InputIterator, InputIterator, const Compare &); template<typename InputIterator> - set(InputIterator, InputIterator, const Compare &, const allocator_type &); + set(InputIterator, InputIterator, const Compare &, const allocator_type &); template<typename InputIterator> - set(ordered_unique_range_t, InputIterator, InputIterator); + set(ordered_unique_range_t, InputIterator, InputIterator); template<typename InputIterator> - set(ordered_unique_range_t, InputIterator, InputIterator, const Compare &); + set(ordered_unique_range_t, InputIterator, InputIterator, const Compare &); template<typename InputIterator> - set(ordered_unique_range_t, InputIterator, InputIterator, const Compare &, + set(ordered_unique_range_t, InputIterator, InputIterator, const Compare &, const allocator_type &); - set(std::initializer_list< value_type >); - set(std::initializer_list< value_type >, const allocator_type &); - set(std::initializer_list< value_type >, const Compare &); - set(std::initializer_list< value_type >, const Compare &, + set(std::initializer_list< value_type >); + set(std::initializer_list< value_type >, const allocator_type &); + set(std::initializer_list< value_type >, const Compare &); + set(std::initializer_list< value_type >, const Compare &, const allocator_type &); - set(ordered_unique_range_t, std::initializer_list< value_type >); - set(ordered_unique_range_t, std::initializer_list< value_type >, + set(ordered_unique_range_t, std::initializer_list< value_type >); + set(ordered_unique_range_t, std::initializer_list< value_type >, const Compare &); - set(ordered_unique_range_t, std::initializer_list< value_type >, + set(ordered_unique_range_t, std::initializer_list< value_type >, const Compare &, const allocator_type &); - set(const set &); - set(set &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); - set(const set &, const allocator_type &); - set(set &&, const allocator_type &); - set & operator=(const set &); - set & operator=(set &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); - set & operator=(std::initializer_list< value_type >); + set(const set &); + set(set &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value)); + set(const set &, const allocator_type &); + set(set &&, const allocator_type &); + set & operator=(const set &); + set & operator=(set &&) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value)); + set & operator=(std::initializer_list< value_type >); - // public member functions - allocator_type get_allocator() const; - stored_allocator_type & get_stored_allocator(); - const stored_allocator_type & get_stored_allocator() const; - iterator begin(); - const_iterator begin() const; - const_iterator cbegin() const; - iterator end(); - const_iterator end() const; - const_iterator cend() const; - reverse_iterator rbegin(); - const_reverse_iterator rbegin() const; - const_reverse_iterator crbegin() const; - reverse_iterator rend(); - const_reverse_iterator rend() const; - const_reverse_iterator crend() const; - bool empty() const; - size_type size() const; - size_type max_size() const; - template<class... Args> std::pair< iterator, bool > emplace(Args &&...); - template<class... Args> iterator emplace_hint(const_iterator, Args &&...); - std::pair< iterator, bool > insert(const value_type &); - std::pair< iterator, bool > insert(value_type &&); - iterator insert(const_iterator, const value_type &); - iterator insert(const_iterator, value_type &&); - template<typename InputIterator> void insert(InputIterator, InputIterator); - void insert(std::initializer_list< value_type >); - insert_return_type insert(node_type &&); - insert_return_type insert(const_iterator, node_type &&); - template<typename C2> void merge(set< Key, C2, Allocator, Options > &); - template<typename C2> void merge(set< Key, C2, Allocator, Options > &&); - template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &); - template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &&); - iterator erase(const_iterator); - size_type erase(const key_type &); - iterator erase(const_iterator, const_iterator); - node_type extract(const_iterator); - node_type extract(const key_type &); - void swap(set &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); - void clear(); - key_compare key_comp() const; - value_compare value_comp() const; - iterator find(const key_type &); - const_iterator find(const key_type &) const; - size_type count(const key_type &) const; - size_type count(const key_type &); - iterator lower_bound(const key_type &); - const_iterator lower_bound(const key_type &) const; - iterator upper_bound(const key_type &); - const_iterator upper_bound(const key_type &) const; - std::pair< iterator, iterator > equal_range(const key_type &); + // public member functions + allocator_type get_allocator() const; + stored_allocator_type & get_stored_allocator(); + const stored_allocator_type & get_stored_allocator() const; + iterator begin(); + const_iterator begin() const; + const_iterator cbegin() const; + iterator end(); + const_iterator end() const; + const_iterator cend() const; + reverse_iterator rbegin(); + const_reverse_iterator rbegin() const; + const_reverse_iterator crbegin() const; + reverse_iterator rend(); + const_reverse_iterator rend() const; + const_reverse_iterator crend() const; + bool empty() const; + size_type size() const; + size_type max_size() const; + template<class... Args> std::pair< iterator, bool > emplace(Args &&...); + template<class... Args> iterator emplace_hint(const_iterator, Args &&...); + std::pair< iterator, bool > insert(const value_type &); + std::pair< iterator, bool > insert(value_type &&); + iterator insert(const_iterator, const value_type &); + iterator insert(const_iterator, value_type &&); + template<typename InputIterator> void insert(InputIterator, InputIterator); + void insert(std::initializer_list< value_type >); + insert_return_type insert(node_type &&); + insert_return_type insert(const_iterator, node_type &&); + template<typename C2> void merge(set< Key, C2, Allocator, Options > &); + template<typename C2> void merge(set< Key, C2, Allocator, Options > &&); + template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &); + template<typename C2> void merge(multiset< Key, C2, Allocator, Options > &&); + iterator erase(const_iterator); + size_type erase(const key_type &); + iterator erase(const_iterator, const_iterator); + node_type extract(const_iterator); + node_type extract(const key_type &); + void swap(set &) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value)); + void clear(); + key_compare key_comp() const; + value_compare value_comp() const; + iterator find(const key_type &); + const_iterator find(const key_type &) const; + size_type count(const key_type &) const; + size_type count(const key_type &); + iterator lower_bound(const key_type &); + const_iterator lower_bound(const key_type &) const; + iterator upper_bound(const key_type &); + const_iterator upper_bound(const key_type &) const; + std::pair< iterator, iterator > equal_range(const key_type &); std::pair< const_iterator, const_iterator > - equal_range(const key_type &) const; - std::pair< iterator, iterator > equal_range(const key_type &); + equal_range(const key_type &) const; + std::pair< iterator, iterator > equal_range(const key_type &); std::pair< const_iterator, const_iterator > - equal_range(const key_type &) const; - void rebalance(); + equal_range(const key_type &) const; + void rebalance(); - // friend functions - friend bool operator==(const set &, const set &); - friend bool operator!=(const set &, const set &); - friend bool operator<(const set &, const set &); - friend bool operator>(const set &, const set &); - friend bool operator<=(const set &, const set &); - friend bool operator>=(const set &, const set &); - friend void swap(set &, set &); + // friend functions + friend bool operator==(const set &, const set &); + friend bool operator!=(const set &, const set &); + friend bool operator<(const set &, const set &); + friend bool operator>(const set &, const set &); + friend bool operator<=(const set &, const set &); + friend bool operator>=(const set &, const set &); + friend void swap(set &, set &); };
    -

    Description

    +

    Description

    A set is a kind of associative container that supports unique keys (contains at most one of each key value) and provides for fast retrieval of the keys themselves. Class set supports bidirectional iterators.

    A set satisfies all of the requirements of a container and of a reversible container , and of an associative container. A set also provides most operations described in for unique keys.

    -

    Template Parameters

    +

    Template Parameters

    1. typename Key
      @@ -190,58 +190,58 @@
    -

    +

    set public construct/copy/destruct

    1. -
      set() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));
      +
      set() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value &&container_detail::is_nothrow_default_constructible< Compare >::value));

      Effects: Default constructs an empty set.

      Complexity: Constant.

    2. -
      explicit set(const allocator_type & a);
      +
      explicit set(const allocator_type & a);

      Effects: Constructs an empty set using the specified allocator object.

      Complexity: Constant.

    3. -
      explicit set(const Compare & comp);
      +
      explicit set(const Compare & comp);

      Effects: Constructs an empty set using the specified comparison object.

      Complexity: Constant.

    4. -
      set(const Compare & comp, const allocator_type & a);
      +
      set(const Compare & comp, const allocator_type & a);

      Effects: Constructs an empty set using the specified comparison object and allocator.

      Complexity: Constant.

    5. -
      template<typename InputIterator> set(InputIterator first, InputIterator last);
      +
      template<typename InputIterator> set(InputIterator first, InputIterator last);

      Effects: Constructs an empty set using and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    6. template<typename InputIterator> 
      -  set(InputIterator first, InputIterator last, const allocator_type & a);
      + set(InputIterator first, InputIterator last, const allocator_type & a);

      Effects: Constructs an empty set using the specified allocator, and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    7. template<typename InputIterator> 
      -  set(InputIterator first, InputIterator last, const Compare & comp);
      + set(InputIterator first, InputIterator last, const Compare & comp);

      Effects: Constructs an empty set using the specified comparison object and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    8. template<typename InputIterator> 
      -  set(InputIterator first, InputIterator last, const Compare & comp, 
      +  set(InputIterator first, InputIterator last, const Compare & comp, 
             const allocator_type & a);

      Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the range [first ,last ).

      Complexity: Linear in N if the range [first ,last ) is already sorted using the predicate and otherwise N logN, where N is last - first.

    9. template<typename InputIterator> 
      -  set(ordered_unique_range_t, InputIterator first, InputIterator last);
      + set(ordered_unique_range_t, InputIterator first, InputIterator last);

      Effects: Constructs an empty set and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [first ,last) must be ordered according to the predicate and must be unique values.

      Complexity: Linear in N.

      @@ -249,7 +249,7 @@
    10. template<typename InputIterator> 
      -  set(ordered_unique_range_t, InputIterator first, InputIterator last, 
      +  set(ordered_unique_range_t, InputIterator first, InputIterator last, 
             const Compare & comp);

      Effects: Constructs an empty set using the specified comparison object and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [first ,last) must be ordered according to the predicate and must be unique values.

      @@ -258,7 +258,7 @@
    11. template<typename InputIterator> 
      -  set(ordered_unique_range_t, InputIterator first, InputIterator last, 
      +  set(ordered_unique_range_t, InputIterator first, InputIterator last, 
             const Compare & comp, const allocator_type & a);

      Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the ordered unique range [first ,last). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [first ,last) must be ordered according to the predicate and must be unique values.

      @@ -266,35 +266,35 @@

      Note: Non-standard extension.

    12. -
      set(std::initializer_list< value_type > il);
      +
      set(std::initializer_list< value_type > il);

      Effects: Constructs an empty set and inserts elements from the range [il.begin(), il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

    13. -
      set(std::initializer_list< value_type > il, const allocator_type & a);
      +
      set(std::initializer_list< value_type > il, const allocator_type & a);

      Effects: Constructs an empty set using the specified allocator, and inserts elements from the range [il.begin(), il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

    14. -
      set(std::initializer_list< value_type > il, const Compare & comp);
      +
      set(std::initializer_list< value_type > il, const Compare & comp);

      Effects: Constructs an empty set using the specified comparison object and inserts elements from the range [il.begin(), il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

    15. -
      set(std::initializer_list< value_type > il, const Compare & comp, 
      +
      set(std::initializer_list< value_type > il, const Compare & comp, 
           const allocator_type & a);

      Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the range [il.begin(), il.end()).

      Complexity: Linear in N if the range [il.begin(), il.end()) is already sorted using the predicate and otherwise N logN, where N is il.begin() - il.end().

    16. -
      set(ordered_unique_range_t, std::initializer_list< value_type > il);
      +
      set(ordered_unique_range_t, std::initializer_list< value_type > il);

      Effects: Constructs an empty set and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      Complexity: Linear in N.

      Note: Non-standard extension.

    17. -
      set(ordered_unique_range_t, std::initializer_list< value_type > il, 
      +
      set(ordered_unique_range_t, std::initializer_list< value_type > il, 
           const Compare & comp);

      Effects: Constructs an empty set using the specified comparison object and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      @@ -302,7 +302,7 @@

      Note: Non-standard extension.

    18. -
      set(ordered_unique_range_t, std::initializer_list< value_type > il, 
      +
      set(ordered_unique_range_t, std::initializer_list< value_type > il, 
           const Compare & comp, const allocator_type & a);

      Effects: Constructs an empty set using the specified comparison object and allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function is more efficient than the normal range creation for ordered ranges.

      Requires: [il.begin(), il.end()) must be ordered according to the predicate and must be unique values.

      @@ -310,159 +310,159 @@

      Note: Non-standard extension.

    19. -
      set(const set & x);
      +
      set(const set & x);

      Effects: Copy constructs a set.

      Complexity: Linear in x.size().

    20. -
      set(set && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));
      +
      set(set && x) noexcept(boost::container::container_detail::is_nothrow_move_constructible< Compare >::value));

      Effects: Move constructs a set. Constructs *this using x's resources.

      Complexity: Constant.

      Postcondition: x is emptied.

    21. -
      set(const set & x, const allocator_type & a);
      +
      set(const set & x, const allocator_type & a);

      Effects: Copy constructs a set using the specified allocator.

      Complexity: Linear in x.size().

    22. -
      set(set && x, const allocator_type & a);
      +
      set(set && x, const allocator_type & a);

      Effects: Move constructs a set using the specified allocator. Constructs *this using x's resources.

      Complexity: Constant if a == x.get_allocator(), linear otherwise.

    23. -
      set & operator=(const set & x);
      +
      set & operator=(const set & x);

      Effects: Makes *this a copy of x.

      Complexity: Linear in x.size().

    24. -
      set & operator=(set && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));
      +
      set & operator=(set && x) noexcept((allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)&&boost::container::container_detail::is_nothrow_move_assignable< Compare >::value));

      Effects: this->swap(x.get()).

      Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

      Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

    25. -
      set & operator=(std::initializer_list< value_type > il);
      +
      set & operator=(std::initializer_list< value_type > il);

      Effects: Copy all elements from il to *this.

      Complexity: Linear in il.size().

    -

    -set public member functions

    +

    +set public member functions

    1. -
      allocator_type get_allocator() const;
      +
      allocator_type get_allocator() const;

      Effects: Returns a copy of the allocator that was passed to the object's constructor.

      Complexity: Constant.

    2. -
      stored_allocator_type & get_stored_allocator();
      +
      stored_allocator_type & get_stored_allocator();

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    3. -
      const stored_allocator_type & get_stored_allocator() const;
      +
      const stored_allocator_type & get_stored_allocator() const;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    4. -
      iterator begin();
      +
      iterator begin();

      Effects: Returns an iterator to the first element contained in the container.

      Throws: Nothing.

      Complexity: Constant

    5. -
      const_iterator begin() const;
      +
      const_iterator begin() const;

      Effects: Returns a const_iterator to the first element contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    6. -
      const_iterator cbegin() const;
      +
      const_iterator cbegin() const;

      Effects: Returns a const_iterator to the first element contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    7. -
      iterator end();
      +
      iterator end();

      Effects: Returns an iterator to the end of the container.

      Throws: Nothing.

      Complexity: Constant.

    8. -
      const_iterator end() const;
      +
      const_iterator end() const;

      Effects: Returns a const_iterator to the end of the container.

      Throws: Nothing.

      Complexity: Constant.

    9. -
      const_iterator cend() const;
      +
      const_iterator cend() const;

      Effects: Returns a const_iterator to the end of the container.

      Throws: Nothing.

      Complexity: Constant.

    10. -
      reverse_iterator rbegin();
      +
      reverse_iterator rbegin();

      Effects: Returns a reverse_iterator pointing to the beginning of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    11. -
      const_reverse_iterator rbegin() const;
      +
      const_reverse_iterator rbegin() const;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    12. -
      const_reverse_iterator crbegin() const;
      +
      const_reverse_iterator crbegin() const;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    13. -
      reverse_iterator rend();
      +
      reverse_iterator rend();

      Effects: Returns a reverse_iterator pointing to the end of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    14. -
      const_reverse_iterator rend() const;
      +
      const_reverse_iterator rend() const;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    15. -
      const_reverse_iterator crend() const;
      +
      const_reverse_iterator crend() const;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed container.

      Throws: Nothing.

      Complexity: Constant.

    16. -
      bool empty() const;
      +
      bool empty() const;

      Effects: Returns true if the container contains no elements.

      Throws: Nothing.

      Complexity: Constant.

    17. -
      size_type size() const;
      +
      size_type size() const;

      Effects: Returns the number of the elements contained in the container.

      Throws: Nothing.

      Complexity: Constant.

    18. -
      size_type max_size() const;
      +
      size_type max_size() const;

      Effects: Returns the largest possible size of the container.

      Throws: Nothing.

      Complexity: Constant.

    19. -
      template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);
      +
      template<class... Args> std::pair< iterator, bool > emplace(Args &&... args);

      Effects: Inserts an object x of type Key constructed with std::forward<Args>(args)... if and only if there is no element in the container with equivalent value. and returns the iterator pointing to the newly inserted element.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Throws: If memory allocation throws or Key's in-place constructor throws.

      @@ -470,61 +470,61 @@
    20. template<class... Args> 
      -  iterator emplace_hint(const_iterator p, Args &&... args);
      + iterator emplace_hint(const_iterator p, Args &&... args);

      Effects: Inserts an object of type Key constructed with std::forward<Args>(args)... if and only if there is no element in the container with equivalent value. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic.

    21. -
      std::pair< iterator, bool > insert(const value_type & x);
      +
      std::pair< iterator, bool > insert(const value_type & x);

      Effects: Inserts x if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic.

    22. -
      std::pair< iterator, bool > insert(value_type && x);
      +
      std::pair< iterator, bool > insert(value_type && x);

      Effects: Move constructs a new value from x if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic.

    23. -
      iterator insert(const_iterator p, const value_type & x);
      +
      iterator insert(const_iterator p, const value_type & x);

      Effects: Inserts a copy of x in the container if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

    24. -
      iterator insert(const_iterator p, value_type && x);
      +
      iterator insert(const_iterator p, value_type && x);

      Effects: Inserts an element move constructed from x in the container. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic.

    25. template<typename InputIterator> 
      -  void insert(InputIterator first, InputIterator last);
      + void insert(InputIterator first, InputIterator last);

      Requires: first, last are not iterators into *this.

      Effects: inserts each element from the range [first,last) if and only if there is no element with key equivalent to the key of that element.

      Complexity: At most N log(size()+N) (N is the distance from first to last)

    26. -
      void insert(std::initializer_list< value_type > il);
      +
      void insert(std::initializer_list< value_type > il);

      Effects: inserts each element from the range [il.begin(),il.end()) if and only if there is no element with key equivalent to the key of that element.

      Complexity: At most N log(size()+N) (N is the distance from il.begin() to il.end())

    27. -
      insert_return_type insert(node_type && nh);
      +
      insert_return_type insert(node_type && nh);

      Effects: Inserts a new value_type move constructed from the pair if and only if there is no element in the container with key equivalent to the key of x.

      Returns: The bool component of the returned pair is true if and only if the insertion takes place, and the iterator component of the pair points to the element with key equivalent to the key of x.

      Complexity: Logarithmic.

    28. -
      insert_return_type insert(const_iterator hint, node_type && nh);
      +
      insert_return_type insert(const_iterator hint, node_type && nh);

      Effects: Move constructs a new value from x if and only if there is no element in the container with key equivalent to the key of x. p is a hint pointing to where the insert should start to search.

      Returns: An iterator pointing to the element with key equivalent to the key of x.

      Complexity: Logarithmic in general, but amortized constant if t is inserted right before p.

    29. -
      template<typename C2> void merge(set< Key, C2, Allocator, Options > & source);
      +
      template<typename C2> void merge(set< Key, C2, Allocator, Options > & source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -532,7 +532,7 @@

      Complexity: N log(a.size() + N) (N has the value source.size())

    30. -
      template<typename C2> void merge(set< Key, C2, Allocator, Options > && source);
      +
      template<typename C2> void merge(set< Key, C2, Allocator, Options > && source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -541,7 +541,7 @@
    31. template<typename C2> 
      -  void merge(multiset< Key, C2, Allocator, Options > & source);
      + void merge(multiset< Key, C2, Allocator, Options > & source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -550,7 +550,7 @@
    32. template<typename C2> 
      -  void merge(multiset< Key, C2, Allocator, Options > && source);
      + void merge(multiset< Key, C2, Allocator, Options > && source);

      Requires: this->get_allocator() == source.get_allocator().

      Effects: Attempts to extract each element in source and insert it into a using the comparison object of *this. If there is an element in a with key equivalent to the key of an element from source, then that element is not extracted from source.

      Postcondition: Pointers and references to the transferred elements of source refer to those same elements but as members of *this. Iterators referring to the transferred elements will continue to refer to their elements, but they now behave as iterators into *this, not into source.

      @@ -558,162 +558,162 @@

      Complexity: N log(a.size() + N) (N has the value source.size())

    33. -
      iterator erase(const_iterator p);
      +
      iterator erase(const_iterator p);

      Effects: Erases the element pointed to by p.

      Returns: Returns an iterator pointing to the element immediately following q prior to the element being erased. If no such element exists, returns end().

      Complexity: Amortized constant time

    34. -
      size_type erase(const key_type & x);
      +
      size_type erase(const key_type & x);

      Effects: Erases all elements in the container with key equivalent to x.

      Returns: Returns the number of erased elements.

      Complexity: log(size()) + count(k)

    35. -
      iterator erase(const_iterator first, const_iterator last);
      +
      iterator erase(const_iterator first, const_iterator last);

      Effects: Erases all the elements in the range [first, last).

      Returns: Returns last.

      Complexity: log(size())+N where N is the distance from first to last.

    36. -
      node_type extract(const_iterator p);
      +
      node_type extract(const_iterator p);

      Effects: Removes the element pointed to by "position".

      Returns: A node_type owning the element, otherwise an empty node_type.

      Complexity: Amortized constant.

    37. -
      node_type extract(const key_type & x);
      +
      node_type extract(const key_type & x);

      Effects: Removes the first element in the container with key equivalent to k.

      Returns: A node_type owning the element if found, otherwise an empty node_type.

      Complexity: log(a.size()).

    38. -
      void swap(set & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));
      +
      void swap(set & x) noexcept(allocator_traits_type::is_always_equal::value &&boost::container::container_detail::is_nothrow_swappable< Compare >::value));

      Effects: Swaps the contents of *this and x.

      Throws: Nothing.

      Complexity: Constant.

    39. -
      void clear();
      +
      void clear();

      Effects: erase(a.begin(),a.end()).

      Postcondition: size() == 0.

      Complexity: linear in size().

    40. -
      key_compare key_comp() const;
      +
      key_compare key_comp() const;

      Effects: Returns the comparison object out of which a was constructed.

      Complexity: Constant.

    41. -
      value_compare value_comp() const;
      +
      value_compare value_comp() const;

      Effects: Returns an object of value_compare constructed out of the comparison object.

      Complexity: Constant.

    42. -
      iterator find(const key_type & x);
      +
      iterator find(const key_type & x);

      Returns: An iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

      Complexity: Logarithmic.

    43. -
      const_iterator find(const key_type & x) const;
      +
      const_iterator find(const key_type & x) const;

      Returns: A const_iterator pointing to an element with the key equivalent to x, or end() if such an element is not found.

      Complexity: Logarithmic.

    44. -
      size_type count(const key_type & x) const;
      +
      size_type count(const key_type & x) const;

      Returns: The number of elements with key equivalent to x.

      Complexity: log(size())+count(k)

    45. -
      size_type count(const key_type & x);
      +
      size_type count(const key_type & x);

      Returns: The number of elements with key equivalent to x.

      Complexity: log(size())+count(k)

    46. -
      iterator lower_bound(const key_type & x);
      +
      iterator lower_bound(const key_type & x);

      Returns: An iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

      Complexity: Logarithmic

    47. -
      const_iterator lower_bound(const key_type & x) const;
      +
      const_iterator lower_bound(const key_type & x) const;

      Returns: A const iterator pointing to the first element with key not less than k, or a.end() if such an element is not found.

      Complexity: Logarithmic

    48. -
      iterator upper_bound(const key_type & x);
      +
      iterator upper_bound(const key_type & x);

      Returns: An iterator pointing to the first element with key not less than x, or end() if such an element is not found.

      Complexity: Logarithmic

    49. -
      const_iterator upper_bound(const key_type & x) const;
      +
      const_iterator upper_bound(const key_type & x) const;

      Returns: A const iterator pointing to the first element with key not less than x, or end() if such an element is not found.

      Complexity: Logarithmic

    50. -
      std::pair< iterator, iterator > equal_range(const key_type & x);
      +
      std::pair< iterator, iterator > equal_range(const key_type & x);

      Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

      Complexity: Logarithmic

    51. std::pair< const_iterator, const_iterator > 
      -equal_range(const key_type & x) const;
      +equal_range(const key_type & x) const;

      Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

      Complexity: Logarithmic

    52. -
      std::pair< iterator, iterator > equal_range(const key_type & x);
      +
      std::pair< iterator, iterator > equal_range(const key_type & x);

      Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

      Complexity: Logarithmic

    53. std::pair< const_iterator, const_iterator > 
      -equal_range(const key_type & x) const;
      +equal_range(const key_type & x) const;

      Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).

      Complexity: Logarithmic

    54. -
      void rebalance();
      +
      void rebalance();

      Effects: Rebalances the tree. It's a no-op for Red-Black and AVL trees.

      Complexity: Linear

    -

    -set friend functions

    +

    +set friend functions

    1. -
      friend bool operator==(const set & x, const set & y);
      +
      friend bool operator==(const set & x, const set & y);

      Effects: Returns true if x and y are equal

      Complexity: Linear to the number of elements in the container.

    2. -
      friend bool operator!=(const set & x, const set & y);
      +
      friend bool operator!=(const set & x, const set & y);

      Effects: Returns true if x and y are unequal

      Complexity: Linear to the number of elements in the container.

    3. -
      friend bool operator<(const set & x, const set & y);
      +
      friend bool operator<(const set & x, const set & y);

      Effects: Returns true if x is less than y

      Complexity: Linear to the number of elements in the container.

    4. -
      friend bool operator>(const set & x, const set & y);
      +
      friend bool operator>(const set & x, const set & y);

      Effects: Returns true if x is greater than y

      Complexity: Linear to the number of elements in the container.

    5. -
      friend bool operator<=(const set & x, const set & y);
      +
      friend bool operator<=(const set & x, const set & y);

      Effects: Returns true if x is equal or less than y

      Complexity: Linear to the number of elements in the container.

    6. -
      friend bool operator>=(const set & x, const set & y);
      +
      friend bool operator>=(const set & x, const set & y);

      Effects: Returns true if x is equal or greater than y

      Complexity: Linear to the number of elements in the container.

    7. -
      friend void swap(set & x, set & y);
      +
      friend void swap(set & x, set & y);

      Effects: x.swap(y)

      Complexity: Constant.

    8. diff --git a/doc/html/boost/container/slist.html b/doc/html/boost/container/slist.html index ec8033ca65..ed85a27fd6 100644 --- a/doc/html/boost/container/slist.html +++ b/doc/html/boost/container/slist.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@

      -PrevUpHomeNext +PrevUpHomeNext
      @@ -49,113 +49,113 @@ typedef implementation_defined const_iterator; // construct/copy/destruct - slist() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit slist(const allocator_type &) noexcept; - explicit slist(size_type); - slist(size_type, const allocator_type &); - explicit slist(size_type, const value_type &, + slist() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit slist(const allocator_type &) noexcept; + explicit slist(size_type); + slist(size_type, const allocator_type &); + explicit slist(size_type, const value_type &, const allocator_type & = allocator_type()); template<typename InpIt> - slist(InpIt, InpIt, const allocator_type & = allocator_type()); - slist(std::initializer_list< value_type >, + slist(InpIt, InpIt, const allocator_type & = allocator_type()); + slist(std::initializer_list< value_type >, const allocator_type & = allocator_type()); - slist(const slist &); - slist(slist &&) noexcept; - slist(const slist &, const allocator_type &); - slist(slist &&, const allocator_type &); - slist & operator=(const slist &); - slist & operator=(slist &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); - slist & operator=(std::initializer_list< value_type >); - ~slist(); + slist(const slist &); + slist(slist &&) noexcept; + slist(const slist &, const allocator_type &); + slist(slist &&, const allocator_type &); + slist & operator=(const slist &); + slist & operator=(slist &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); + slist & operator=(std::initializer_list< value_type >); + ~slist(); - // public member functions - void assign(size_type, const T &); - template<typename InpIt> void assign(InpIt, InpIt); - void assign(std::initializer_list< value_type >); - allocator_type get_allocator() const noexcept; - stored_allocator_type & get_stored_allocator() noexcept; - const stored_allocator_type & get_stored_allocator() const noexcept; - iterator before_begin() noexcept; - const_iterator before_begin() const noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - const_iterator cbefore_begin() const noexcept; - const_iterator cbegin() const noexcept; - const_iterator cend() const noexcept; - iterator previous(iterator) noexcept; - const_iterator previous(const_iterator); - bool empty() const; - size_type size() const; - size_type max_size() const; - void resize(size_type); - void resize(size_type, const T &); - reference front(); - const_reference front() const; - template<class... Args> reference emplace_front(Args &&...); - template<class... Args> iterator emplace_after(const_iterator, Args &&...); - void push_front(const T &); - void push_front(T &&); - iterator insert_after(const_iterator, const T &); - iterator insert_after(const_iterator, T &&); - iterator insert_after(const_iterator, size_type, const value_type &); - template<typename InpIt> iterator insert_after(const_iterator, InpIt, InpIt); - iterator insert_after(const_iterator, std::initializer_list< value_type >); - void pop_front(); - iterator erase_after(const_iterator); - iterator erase_after(const_iterator, const_iterator); - void swap(slist &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); - void clear(); - void splice_after(const_iterator, slist &) noexcept; - void splice_after(const_iterator, slist &&) noexcept; - void splice_after(const_iterator, slist &, const_iterator) noexcept; - void splice_after(const_iterator, slist &&, const_iterator) noexcept; - void splice_after(const_iterator, slist &, const_iterator, const_iterator) noexcept; - void splice_after(const_iterator, slist &&, const_iterator, const_iterator) noexcept; - void splice_after(const_iterator, slist &, const_iterator, const_iterator, + // public member functions + void assign(size_type, const T &); + template<typename InpIt> void assign(InpIt, InpIt); + void assign(std::initializer_list< value_type >); + allocator_type get_allocator() const noexcept; + stored_allocator_type & get_stored_allocator() noexcept; + const stored_allocator_type & get_stored_allocator() const noexcept; + iterator before_begin() noexcept; + const_iterator before_begin() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + const_iterator cbefore_begin() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + iterator previous(iterator) noexcept; + const_iterator previous(const_iterator); + bool empty() const; + size_type size() const; + size_type max_size() const; + void resize(size_type); + void resize(size_type, const T &); + reference front(); + const_reference front() const; + template<class... Args> reference emplace_front(Args &&...); + template<class... Args> iterator emplace_after(const_iterator, Args &&...); + void push_front(const T &); + void push_front(T &&); + iterator insert_after(const_iterator, const T &); + iterator insert_after(const_iterator, T &&); + iterator insert_after(const_iterator, size_type, const value_type &); + template<typename InpIt> iterator insert_after(const_iterator, InpIt, InpIt); + iterator insert_after(const_iterator, std::initializer_list< value_type >); + void pop_front(); + iterator erase_after(const_iterator); + iterator erase_after(const_iterator, const_iterator); + void swap(slist &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); + void clear(); + void splice_after(const_iterator, slist &) noexcept; + void splice_after(const_iterator, slist &&) noexcept; + void splice_after(const_iterator, slist &, const_iterator) noexcept; + void splice_after(const_iterator, slist &&, const_iterator) noexcept; + void splice_after(const_iterator, slist &, const_iterator, const_iterator) noexcept; + void splice_after(const_iterator, slist &&, const_iterator, const_iterator) noexcept; + void splice_after(const_iterator, slist &, const_iterator, const_iterator, size_type) noexcept; - void splice_after(const_iterator, slist &&, const_iterator, const_iterator, + void splice_after(const_iterator, slist &&, const_iterator, const_iterator, size_type) noexcept; - void remove(const T &); - template<typename Pred> void remove_if(Pred); - void unique(); - template<typename Pred> void unique(Pred); - void merge(slist &); - void merge(slist &&); + void remove(const T &); + template<typename Pred> void remove_if(Pred); + void unique(); + template<typename Pred> void unique(Pred); + void merge(slist &); + void merge(slist &&); template<typename StrictWeakOrdering> - void merge(slist &, StrictWeakOrdering); + void merge(slist &, StrictWeakOrdering); template<typename StrictWeakOrdering> - void merge(slist &&, StrictWeakOrdering); - void sort(); - template<typename StrictWeakOrdering> void sort(StrictWeakOrdering); - void reverse() noexcept; - template<class... Args> iterator emplace(const_iterator, Args &&...); - iterator insert(const_iterator, const T &); - iterator insert(const_iterator, T &&); - iterator insert(const_iterator, size_type, const value_type &); - template<typename InIter> iterator insert(const_iterator, InIter, InIter); - iterator insert(const_iterator, std::initializer_list< value_type >); - iterator erase(const_iterator) noexcept; - iterator erase(const_iterator, const_iterator) noexcept; - void splice(const_iterator, slist &) noexcept; - void splice(const_iterator, slist &&) noexcept; - void splice(const_iterator, slist &, const_iterator) noexcept; - void splice(const_iterator, slist &&, const_iterator) noexcept; - void splice(const_iterator, slist &, const_iterator, const_iterator) noexcept; - void splice(const_iterator, slist &&, const_iterator, const_iterator) noexcept; + void merge(slist &&, StrictWeakOrdering); + void sort(); + template<typename StrictWeakOrdering> void sort(StrictWeakOrdering); + void reverse() noexcept; + template<class... Args> iterator emplace(const_iterator, Args &&...); + iterator insert(const_iterator, const T &); + iterator insert(const_iterator, T &&); + iterator insert(const_iterator, size_type, const value_type &); + template<typename InIter> iterator insert(const_iterator, InIter, InIter); + iterator insert(const_iterator, std::initializer_list< value_type >); + iterator erase(const_iterator) noexcept; + iterator erase(const_iterator, const_iterator) noexcept; + void splice(const_iterator, slist &) noexcept; + void splice(const_iterator, slist &&) noexcept; + void splice(const_iterator, slist &, const_iterator) noexcept; + void splice(const_iterator, slist &&, const_iterator) noexcept; + void splice(const_iterator, slist &, const_iterator, const_iterator) noexcept; + void splice(const_iterator, slist &&, const_iterator, const_iterator) noexcept; - // friend functions - friend bool operator==(const slist &, const slist &); - friend bool operator!=(const slist &, const slist &); - friend bool operator<(const slist &, const slist &); - friend bool operator>(const slist &, const slist &); - friend bool operator<=(const slist &, const slist &); - friend bool operator>=(const slist &, const slist &); - friend void swap(slist &, slist &); + // friend functions + friend bool operator==(const slist &, const slist &); + friend bool operator!=(const slist &, const slist &); + friend bool operator<(const slist &, const slist &); + friend bool operator>(const slist &, const slist &); + friend bool operator<=(const slist &, const slist &); + friend bool operator>=(const slist &, const slist &); + friend void swap(slist &, slist &); };
      -

      Description

      +

      Description

      An slist is a singly linked list: a list where each element is linked to the next element, but not to the previous element. That is, it is a Sequence that supports forward but not backward traversal, and (amortized) constant time insertion and removal of elements. Slists, like lists, have the important property that insertion and splicing do not invalidate iterators to list elements, and that even removal invalidates only the iterators that point to the elements that are removed. The ordering of iterators may be changed (that is, slist<T>::iterator might have a different predecessor or successor after a list operation than it did before), but the iterators themselves will not be invalidated or made to point to different elements unless that invalidation or mutation is explicit.

      The main difference between slist and list is that list's iterators are bidirectional iterators, while slist's iterators are forward iterators. This means that slist is less versatile than list; frequently, however, bidirectional iterators are unnecessary. You should usually use slist unless you actually need the extra functionality of list, because singly linked lists are smaller and faster than double linked lists.

      Important performance note: like every other Sequence, slist defines the member functions insert and erase. Using these member functions carelessly, however, can result in disastrously slow programs. The problem is that insert's first argument is an iterator p, and that it inserts the new element(s) before p. This means that insert must find the iterator just before p; this is a constant-time operation for list, since list has bidirectional iterators, but for slist it must find that iterator by traversing the list from the beginning up to p. In other words: insert and erase are slow operations anywhere but near the beginning of the slist.

      @@ -163,7 +163,7 @@

      -

      Template Parameters

      +

      Template Parameters

      1. typename T
        @@ -176,37 +176,37 @@
      -

      +

      slist public construct/copy/destruct

      1. -
        slist() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
        +
        slist() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));

        Effects: Constructs a list taking the allocator as parameter.

        Throws: If allocator_type's copy constructor throws.

        Complexity: Constant.

      2. -
        explicit slist(const allocator_type & a) noexcept;
        +
        explicit slist(const allocator_type & a) noexcept;

        Effects: Constructs a list taking the allocator as parameter.

        Throws: Nothing

        Complexity: Constant.

      3. -
        explicit slist(size_type n);
        +
        explicit slist(size_type n);

        Effects: Constructs a list and inserts n value-initialized value_types.

        Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

        Complexity: Linear to n.

      4. -
        slist(size_type n, const allocator_type & a);
        +
        slist(size_type n, const allocator_type & a);

        Effects: Constructs a list that will use a copy of allocator a and inserts n copies of value.

        Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

        Complexity: Linear to n.

      5. -
        explicit slist(size_type n, const value_type & x, 
        +
        explicit slist(size_type n, const value_type & x, 
                        const allocator_type & a = allocator_type());

        Effects: Constructs a list that will use a copy of allocator a and inserts n copies of value.

        Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

        @@ -214,65 +214,65 @@
      6. template<typename InpIt> 
        -  slist(InpIt first, InpIt last, const allocator_type & a = allocator_type());
        + slist(InpIt first, InpIt last, const allocator_type & a = allocator_type());

        Effects: Constructs a list that will use a copy of allocator a and inserts a copy of the range [first, last) in the list.

        Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced InIt throws.

        Complexity: Linear to the range [first, last).

      7. -
        slist(std::initializer_list< value_type > il, 
        +
        slist(std::initializer_list< value_type > il, 
               const allocator_type & a = allocator_type());

        Effects: Constructs a list that will use a copy of allocator a and inserts a copy of the range [il.begin(), il.end()) in the list.

        Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced std::initializer_list iterator throws.

        Complexity: Linear to the range [il.begin(), il.end()).

      8. -
        slist(const slist & x);
        +
        slist(const slist & x);

        Effects: Copy constructs a list. Postcondition: x == *this.

        Throws: If allocator_type's default constructor

        Complexity: Linear to the elements x contains.

      9. -
        slist(slist && x) noexcept;
        +
        slist(slist && x) noexcept;

        Effects: Move constructor. Moves x's resources to *this.

        Throws: If allocator_type's copy constructor throws.

        Complexity: Constant.

      10. -
        slist(const slist & x, const allocator_type & a);
        +
        slist(const slist & x, const allocator_type & a);

        Effects: Copy constructs a list using the specified allocator.

        Postcondition: x == *this.

        Throws: If allocator_type's default constructor

        Complexity: Linear to the elements x contains.

      11. -
        slist(slist && x, const allocator_type & a);
        +
        slist(slist && x, const allocator_type & a);

        Effects: Move constructor using the specified allocator. Moves x's resources to *this.

        Throws: If allocation or value_type's copy constructor throws.

        Complexity: Constant if a == x.get_allocator(), linear otherwise.

      12. -
        slist & operator=(const slist & x);
        +
        slist & operator=(const slist & x);

        Effects: Makes *this contain the same elements as x.

        Postcondition: this->size() == x.size(). *this contains a copy of each of x's elements.

        Throws: If memory allocation throws or T's copy constructor throws.

        Complexity: Linear to the number of elements in x.

      13. -
        slist & operator=(slist && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));
        +
        slist & operator=(slist && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));

        Effects: Makes *this contain the same elements as x.

        Postcondition: this->size() == x.size(). *this contains a copy of each of x's elements.

        Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

        Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

      14. -
        slist & operator=(std::initializer_list< value_type > il);
        +
        slist & operator=(std::initializer_list< value_type > il);

        Effects: Makes *this contain the same elements as in il.

        Postcondition: this->size() == il.size(). *this contains a copy of each of il's elements.

        Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

      15. -
        ~slist();
        +
        ~slist();

        Effects: Destroys the list. All stored values are destroyed and used memory is deallocated.

        Throws: Nothing.

        Complexity: Linear to the number of elements.

        @@ -280,161 +280,161 @@
      -

      -slist public member functions

      +

      +slist public member functions

      1. -
        void assign(size_type n, const T & val);
        +
        void assign(size_type n, const T & val);

        Effects: Assigns the n copies of val to *this.

        Throws: If memory allocation throws or T's copy constructor throws.

        Complexity: Linear to n.

      2. -
        template<typename InpIt> void assign(InpIt first, InpIt last);
        +
        template<typename InpIt> void assign(InpIt first, InpIt last);

        Effects: Assigns the range [first, last) to *this.

        Throws: If memory allocation throws or T's constructor from dereferencing InpIt throws.

        Complexity: Linear to n.

      3. -
        void assign(std::initializer_list< value_type > il);
        +
        void assign(std::initializer_list< value_type > il);

        Effects: Assigns the range [il.begin(), il.end()) to *this.

        Throws: If memory allocation throws or T's constructor from dereferencing std::initializer_list iterator throws.

        Complexity: Linear to range [il.begin(), il.end()).

      4. -
        allocator_type get_allocator() const noexcept;
        +
        allocator_type get_allocator() const noexcept;

        Effects: Returns a copy of the internal allocator.

        Throws: If allocator's copy constructor throws.

        Complexity: Constant.

      5. -
        stored_allocator_type & get_stored_allocator() noexcept;
        +
        stored_allocator_type & get_stored_allocator() noexcept;

        Effects: Returns a reference to the internal allocator.

        Throws: Nothing

        Complexity: Constant.

        Note: Non-standard extension.

      6. -
        const stored_allocator_type & get_stored_allocator() const noexcept;
        +
        const stored_allocator_type & get_stored_allocator() const noexcept;

        Effects: Returns a reference to the internal allocator.

        Throws: Nothing

        Complexity: Constant.

        Note: Non-standard extension.

      7. -
        iterator before_begin() noexcept;
        +
        iterator before_begin() noexcept;

        Effects: Returns a non-dereferenceable iterator that, when incremented, yields begin(). This iterator may be used as the argument to insert_after, erase_after, etc.

        Throws: Nothing.

        Complexity: Constant.

      8. -
        const_iterator before_begin() const noexcept;
        +
        const_iterator before_begin() const noexcept;

        Effects: Returns a non-dereferenceable const_iterator that, when incremented, yields begin(). This iterator may be used as the argument to insert_after, erase_after, etc.

        Throws: Nothing.

        Complexity: Constant.

      9. -
        iterator begin() noexcept;
        +
        iterator begin() noexcept;

        Effects: Returns an iterator to the first element contained in the list.

        Throws: Nothing.

        Complexity: Constant.

      10. -
        const_iterator begin() const noexcept;
        +
        const_iterator begin() const noexcept;

        Effects: Returns a const_iterator to the first element contained in the list.

        Throws: Nothing.

        Complexity: Constant.

      11. -
        iterator end() noexcept;
        +
        iterator end() noexcept;

        Effects: Returns an iterator to the end of the list.

        Throws: Nothing.

        Complexity: Constant.

      12. -
        const_iterator end() const noexcept;
        +
        const_iterator end() const noexcept;

        Effects: Returns a const_iterator to the end of the list.

        Throws: Nothing.

        Complexity: Constant.

      13. -
        const_iterator cbefore_begin() const noexcept;
        +
        const_iterator cbefore_begin() const noexcept;

        Effects: Returns a non-dereferenceable const_iterator that, when incremented, yields begin(). This iterator may be used as the argument to insert_after, erase_after, etc.

        Throws: Nothing.

        Complexity: Constant.

      14. -
        const_iterator cbegin() const noexcept;
        +
        const_iterator cbegin() const noexcept;

        Effects: Returns a const_iterator to the first element contained in the list.

        Throws: Nothing.

        Complexity: Constant.

      15. -
        const_iterator cend() const noexcept;
        +
        const_iterator cend() const noexcept;

        Effects: Returns a const_iterator to the end of the list.

        Throws: Nothing.

        Complexity: Constant.

      16. -
        iterator previous(iterator p) noexcept;
        +
        iterator previous(iterator p) noexcept;

        Returns: The iterator to the element before i in the sequence. Returns the end-iterator, if either i is the begin-iterator or the sequence is empty.

        Throws: Nothing.

        Complexity: Linear to the number of elements before i.

        Note: Non-standard extension.

      17. -
        const_iterator previous(const_iterator p);
        +
        const_iterator previous(const_iterator p);

        Returns: The const_iterator to the element before i in the sequence. Returns the end-const_iterator, if either i is the begin-const_iterator or the sequence is empty.

        Throws: Nothing.

        Complexity: Linear to the number of elements before i.

        Note: Non-standard extension.

      18. -
        bool empty() const;
        +
        bool empty() const;

        Effects: Returns true if the list contains no elements.

        Throws: Nothing.

        Complexity: Constant.

      19. -
        size_type size() const;
        +
        size_type size() const;

        Effects: Returns the number of the elements contained in the list.

        Throws: Nothing.

        Complexity: Constant.

      20. -
        size_type max_size() const;
        +
        size_type max_size() const;

        Effects: Returns the largest possible size of the list.

        Throws: Nothing.

        Complexity: Constant.

      21. -
        void resize(size_type new_size);
        +
        void resize(size_type new_size);

        Effects: Inserts or erases elements at the end such that the size becomes n. New elements are value initialized.

        Throws: If memory allocation throws, or T's copy constructor throws.

        Complexity: Linear to the difference between size() and new_size.

      22. -
        void resize(size_type new_size, const T & x);
        +
        void resize(size_type new_size, const T & x);

        Effects: Inserts or erases elements at the end such that the size becomes n. New elements are copy constructed from x.

        Throws: If memory allocation throws, or T's copy constructor throws.

        Complexity: Linear to the difference between size() and new_size.

      23. -
        reference front();
        +
        reference front();

        Requires: !empty()

        Effects: Returns a reference to the first element from the beginning of the container.

        Throws: Nothing.

        Complexity: Constant.

      24. -
        const_reference front() const;
        +
        const_reference front() const;

        Requires: !empty()

        Effects: Returns a const reference to the first element from the beginning of the container.

        Throws: Nothing.

        Complexity: Constant.

      25. -
        template<class... Args> reference emplace_front(Args &&... args);
        +
        template<class... Args> reference emplace_front(Args &&... args);

        Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the front of the list

        Returns: A reference to the created object.

        Throws: If memory allocation throws or T's copy constructor throws.

        @@ -442,25 +442,25 @@
      26. template<class... Args> 
        -  iterator emplace_after(const_iterator prev, Args &&... args);
        + iterator emplace_after(const_iterator prev, Args &&... args);

        Effects: Inserts an object of type T constructed with std::forward<Args>(args)... after prev

        Throws: If memory allocation throws or T's in-place constructor throws.

        Complexity: Constant

      27. -
        void push_front(const T & x);
        +
        void push_front(const T & x);

        Effects: Inserts a copy of x at the beginning of the list.

        Throws: If memory allocation throws or T's copy constructor throws.

        Complexity: Amortized constant time.

      28. -
        void push_front(T && x);
        +
        void push_front(T && x);

        Effects: Constructs a new element in the beginning of the list and moves the resources of x to this new element.

        Throws: If memory allocation throws.

        Complexity: Amortized constant time.

      29. -
        iterator insert_after(const_iterator prev_p, const T & x);
        +
        iterator insert_after(const_iterator prev_p, const T & x);

        Requires: p must be a valid iterator of *this.

        Effects: Inserts a copy of the value after prev_p.

        Returns: An iterator to the inserted element.

        @@ -469,7 +469,7 @@

        Note: Does not affect the validity of iterators and references of previous values.

      30. -
        iterator insert_after(const_iterator prev_p, T && x);
        +
        iterator insert_after(const_iterator prev_p, T && x);

        Requires: prev_p must be a valid iterator of *this.

        Effects: Inserts a move constructed copy object from the value after the element pointed by prev_p.

        Returns: An iterator to the inserted element.

        @@ -478,7 +478,7 @@

        Note: Does not affect the validity of iterators and references of previous values.

      31. -
        iterator insert_after(const_iterator prev_p, size_type n, 
        +
        iterator insert_after(const_iterator prev_p, size_type n, 
                               const value_type & x);

        Requires: prev_p must be a valid iterator of *this.

        Effects: Inserts n copies of x after prev_p.

        @@ -489,7 +489,7 @@
      32. template<typename InpIt> 
        -  iterator insert_after(const_iterator prev_p, InpIt first, InpIt last);
        + iterator insert_after(const_iterator prev_p, InpIt first, InpIt last);

        Requires: prev_p must be a valid iterator of *this.

        Effects: Inserts the range pointed by [first, last) after prev_p.

        Returns: an iterator to the last inserted element or prev_p if first == last.

        @@ -498,7 +498,7 @@

        Note: Does not affect the validity of iterators and references of previous values.

      33. -
        iterator insert_after(const_iterator prev_p, 
        +
        iterator insert_after(const_iterator prev_p, 
                               std::initializer_list< value_type > il);

        Requires: prev_p must be a valid iterator of *this.

        Effects: Inserts the range pointed by [il.begin(), il.end()) after prev_p.

        @@ -508,13 +508,13 @@

        Note: Does not affect the validity of iterators and references of previous values.

      34. -
        void pop_front();
        +
        void pop_front();

        Effects: Removes the first element from the list.

        Throws: Nothing.

        Complexity: Amortized constant time.

      35. -
        iterator erase_after(const_iterator prev_p);
        +
        iterator erase_after(const_iterator prev_p);

        Effects: Erases the element after the element pointed by prev_p of the list.

        Returns: the first element remaining beyond the removed elements, or end() if no such element exists.

        Throws: Nothing.

        @@ -522,7 +522,7 @@

        Note: Does not invalidate iterators or references to non erased elements.

      36. -
        iterator erase_after(const_iterator before_first, const_iterator last);
        +
        iterator erase_after(const_iterator before_first, const_iterator last);

        Effects: Erases the range (before_first, last) from the list.

        Returns: the first element remaining beyond the removed elements, or end() if no such element exists.

        Throws: Nothing.

        @@ -530,19 +530,19 @@

        Note: Does not invalidate iterators or references to non erased elements.

      37. -
        void swap(slist & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));
        +
        void swap(slist & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));

        Effects: Swaps the contents of *this and x.

        Throws: Nothing.

        Complexity: Linear to the number of elements on *this and x.

      38. -
        void clear();
        +
        void clear();

        Effects: Erases all the elements of the list.

        Throws: Nothing.

        Complexity: Linear to the number of elements in the list.

      39. -
        void splice_after(const_iterator prev_p, slist & x) noexcept;
        +
        void splice_after(const_iterator prev_p, slist & x) noexcept;

        Requires: p must point to an element contained by the list. x != *this

        Effects: Transfers all the elements of list x to this list, after the the element pointed by p. No destructors or copy constructors are called.

        Throws: std::runtime_error if this' allocator and x's allocator are not equal.

        @@ -550,7 +550,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      40. -
        void splice_after(const_iterator prev_p, slist && x) noexcept;
        +
        void splice_after(const_iterator prev_p, slist && x) noexcept;

        Requires: p must point to an element contained by the list. x != *this

        Effects: Transfers all the elements of list x to this list, after the the element pointed by p. No destructors or copy constructors are called.

        Throws: std::runtime_error if this' allocator and x's allocator are not equal.

        @@ -558,7 +558,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      41. -
        void splice_after(const_iterator prev_p, slist & x, const_iterator prev) noexcept;
        +
        void splice_after(const_iterator prev_p, slist & x, const_iterator prev) noexcept;

        Requires: prev_p must be a valid iterator of this. i must point to an element contained in list x. this' allocator and x's allocator shall compare equal.

        Effects: Transfers the value pointed by i, from list x to this list, after the element pointed by prev_p. If prev_p == prev or prev_p == ++prev, this function is a null operation.

        Throws: Nothing

        @@ -566,7 +566,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      42. -
        void splice_after(const_iterator prev_p, slist && x, const_iterator prev) noexcept;
        +
        void splice_after(const_iterator prev_p, slist && x, const_iterator prev) noexcept;

        Requires: prev_p must be a valid iterator of this. i must point to an element contained in list x. this' allocator and x's allocator shall compare equal.

        Effects: Transfers the value pointed by i, from list x to this list, after the element pointed by prev_p. If prev_p == prev or prev_p == ++prev, this function is a null operation.

        Throws: Nothing

        @@ -574,7 +574,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      43. -
        void splice_after(const_iterator prev_p, slist & x, 
        +
        void splice_after(const_iterator prev_p, slist & x, 
                           const_iterator before_first, const_iterator before_last) noexcept;

        Requires: prev_p must be a valid iterator of this. before_first and before_last must be valid iterators of x. prev_p must not be contained in [before_first, before_last) range. this' allocator and x's allocator shall compare equal.

        Effects: Transfers the range [before_first + 1, before_last + 1) from list x to this list, after the element pointed by prev_p.

        @@ -583,7 +583,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      44. -
        void splice_after(const_iterator prev_p, slist && x, 
        +
        void splice_after(const_iterator prev_p, slist && x, 
                           const_iterator before_first, const_iterator before_last) noexcept;

        Requires: prev_p must be a valid iterator of this. before_first and before_last must be valid iterators of x. prev_p must not be contained in [before_first, before_last) range. this' allocator and x's allocator shall compare equal.

        Effects: Transfers the range [before_first + 1, before_last + 1) from list x to this list, after the element pointed by prev_p.

        @@ -592,7 +592,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      45. -
        void splice_after(const_iterator prev_p, slist & x, 
        +
        void splice_after(const_iterator prev_p, slist & x, 
                           const_iterator before_first, const_iterator before_last, 
                           size_type n) noexcept;

        Requires: prev_p must be a valid iterator of this. before_first and before_last must be valid iterators of x. prev_p must not be contained in [before_first, before_last) range. n == distance(before_first, before_last). this' allocator and x's allocator shall compare equal.

        @@ -602,7 +602,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      46. -
        void splice_after(const_iterator prev_p, slist && x, 
        +
        void splice_after(const_iterator prev_p, slist && x, 
                           const_iterator before_first, const_iterator before_last, 
                           size_type n) noexcept;

        Requires: prev_p must be a valid iterator of this. before_first and before_last must be valid iterators of x. prev_p must not be contained in [before_first, before_last) range. n == distance(before_first, before_last). this' allocator and x's allocator shall compare equal.

        @@ -612,42 +612,42 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      47. -
        void remove(const T & value);
        +
        void remove(const T & value);

        Effects: Removes all the elements that compare equal to value.

        Throws: Nothing.

        Complexity: Linear time. It performs exactly size() comparisons for equality.

        Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

      48. -
        template<typename Pred> void remove_if(Pred pred);
        +
        template<typename Pred> void remove_if(Pred pred);

        Effects: Removes all the elements for which a specified predicate is satisfied.

        Throws: If pred throws.

        Complexity: Linear time. It performs exactly size() calls to the predicate.

        Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

      49. -
        void unique();
        +
        void unique();

        Effects: Removes adjacent duplicate elements or adjacent elements that are equal from the list.

        Throws: If comparison throws.

        Complexity: Linear time (size()-1 comparisons equality comparisons).

        Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

      50. -
        template<typename Pred> void unique(Pred pred);
        +
        template<typename Pred> void unique(Pred pred);

        Effects: Removes adjacent duplicate elements or adjacent elements that satisfy some binary predicate from the list.

        Throws: If pred throws.

        Complexity: Linear time (size()-1 comparisons calls to pred()).

        Note: The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid.

      51. -
        void merge(slist & x);
        +
        void merge(slist & x);

        Requires: The lists x and *this must be distinct.

        Effects: This function removes all of x's elements and inserts them in order into *this according to std::less<value_type>. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

        Throws: If comparison throws.

        Complexity: This function is linear time: it performs at most size() + x.size() - 1 comparisons.

      52. -
        void merge(slist && x);
        +
        void merge(slist && x);

        Requires: The lists x and *this must be distinct.

        Effects: This function removes all of x's elements and inserts them in order into *this according to std::less<value_type>. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

        Throws: If comparison throws.

        @@ -655,7 +655,7 @@
      53. template<typename StrictWeakOrdering> 
        -  void merge(slist & x, StrictWeakOrdering comp);
        + void merge(slist & x, StrictWeakOrdering comp);

        Requires: p must be a comparison function that induces a strict weak ordering and both *this and x must be sorted according to that ordering The lists x and *this must be distinct.

        Effects: This function removes all of x's elements and inserts them in order into *this. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

        Throws: If comp throws.

        @@ -664,7 +664,7 @@
      54. template<typename StrictWeakOrdering> 
        -  void merge(slist && x, StrictWeakOrdering comp);
        + void merge(slist && x, StrictWeakOrdering comp);

        Requires: p must be a comparison function that induces a strict weak ordering and both *this and x must be sorted according to that ordering The lists x and *this must be distinct.

        Effects: This function removes all of x's elements and inserts them in order into *this. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x.

        Throws: If comp throws.

        @@ -672,34 +672,34 @@

        Note: Iterators and references to *this are not invalidated.

      55. -
        void sort();
        +
        void sort();

        Effects: This function sorts the list *this according to std::less<value_type>. The sort is stable, that is, the relative order of equivalent elements is preserved.

        Throws: If comparison throws.

        Notes: Iterators and references are not invalidated.

        Complexity: The number of comparisons is approximately N log N, where N is the list's size.

      56. -
        template<typename StrictWeakOrdering> void sort(StrictWeakOrdering comp);
        +
        template<typename StrictWeakOrdering> void sort(StrictWeakOrdering comp);

        Effects: This function sorts the list *this according to std::less<value_type>. The sort is stable, that is, the relative order of equivalent elements is preserved.

        Throws: If comp throws.

        Notes: Iterators and references are not invalidated.

        Complexity: The number of comparisons is approximately N log N, where N is the list's size.

      57. -
        void reverse() noexcept;
        +
        void reverse() noexcept;

        Effects: Reverses the order of elements in the list.

        Throws: Nothing.

        Complexity: This function is linear time.

        Note: Iterators and references are not invalidated

      58. -
        template<class... Args> iterator emplace(const_iterator p, Args &&... args);
        +
        template<class... Args> iterator emplace(const_iterator p, Args &&... args);

        Effects: Inserts an object of type T constructed with std::forward<Args>(args)... before p

        Throws: If memory allocation throws or T's in-place constructor throws.

        Complexity: Linear to the elements before p

      59. -
        iterator insert(const_iterator p, const T & x);
        +
        iterator insert(const_iterator p, const T & x);

        Requires: p must be a valid iterator of *this.

        Effects: Insert a copy of x before p.

        Returns: an iterator to the inserted element.

        @@ -707,7 +707,7 @@

        Complexity: Linear to the elements before p.

      60. -
        iterator insert(const_iterator prev_p, T && x);
        +
        iterator insert(const_iterator prev_p, T && x);

        Requires: p must be a valid iterator of *this.

        Effects: Insert a new element before p with x's resources.

        Returns: an iterator to the inserted element.

        @@ -715,7 +715,7 @@

        Complexity: Linear to the elements before p.

      61. -
        iterator insert(const_iterator p, size_type n, const value_type & x);
        +
        iterator insert(const_iterator p, size_type n, const value_type & x);

        Requires: p must be a valid iterator of *this.

        Effects: Inserts n copies of x before p.

        Returns: an iterator to the first inserted element or p if n == 0.

        @@ -724,7 +724,7 @@
      62. template<typename InIter> 
        -  iterator insert(const_iterator p, InIter first, InIter last);
        + iterator insert(const_iterator p, InIter first, InIter last);

        Requires: p must be a valid iterator of *this.

        Effects: Insert a copy of the [first, last) range before p.

        Returns: an iterator to the first inserted element or p if first == last.

        @@ -732,7 +732,7 @@

        Complexity: Linear to distance [first, last) plus linear to the elements before p.

      63. -
        iterator insert(const_iterator p, std::initializer_list< value_type > il);
        +
        iterator insert(const_iterator p, std::initializer_list< value_type > il);

        Requires: p must be a valid iterator of *this.

        Effects: Insert a copy of the [il.begin(), il.end()) range before p.

        Returns: an iterator to the first inserted element or p if il.begin() == il.end().

        @@ -740,21 +740,21 @@

        Complexity: Linear to the range [il.begin(), il.end()) plus linear to the elements before p.

      64. -
        iterator erase(const_iterator p) noexcept;
        +
        iterator erase(const_iterator p) noexcept;

        Requires: p must be a valid iterator of *this.

        Effects: Erases the element at p.

        Throws: Nothing.

        Complexity: Linear to the number of elements before p.

      65. -
        iterator erase(const_iterator first, const_iterator last) noexcept;
        +
        iterator erase(const_iterator first, const_iterator last) noexcept;

        Requires: first and last must be valid iterator to elements in *this.

        Effects: Erases the elements pointed by [first, last).

        Throws: Nothing.

        Complexity: Linear to the distance between first and last plus linear to the elements before first.

      66. -
        void splice(const_iterator p, slist & x) noexcept;
        +
        void splice(const_iterator p, slist & x) noexcept;

        Requires: p must point to an element contained by the list. x != *this. this' allocator and x's allocator shall compare equal

        Effects: Transfers all the elements of list x to this list, before the the element pointed by p. No destructors or copy constructors are called.

        Throws: Nothing

        @@ -762,7 +762,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      67. -
        void splice(const_iterator p, slist && x) noexcept;
        +
        void splice(const_iterator p, slist && x) noexcept;

        Requires: p must point to an element contained by the list. x != *this. this' allocator and x's allocator shall compare equal

        Effects: Transfers all the elements of list x to this list, before the the element pointed by p. No destructors or copy constructors are called.

        Throws: Nothing

        @@ -770,7 +770,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      68. -
        void splice(const_iterator p, slist & x, const_iterator i) noexcept;
        +
        void splice(const_iterator p, slist & x, const_iterator i) noexcept;

        Requires: p must point to an element contained by this list. i must point to an element contained in list x. this' allocator and x's allocator shall compare equal

        Effects: Transfers the value pointed by i, from list x to this list, before the element pointed by p. No destructors or copy constructors are called. If p == i or p == ++i, this function is a null operation.

        Throws: Nothing

        @@ -778,7 +778,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      69. -
        void splice(const_iterator p, slist && x, const_iterator i) noexcept;
        +
        void splice(const_iterator p, slist && x, const_iterator i) noexcept;

        Requires: p must point to an element contained by this list. i must point to an element contained in list x. this' allocator and x's allocator shall compare equal.

        Effects: Transfers the value pointed by i, from list x to this list, before the element pointed by p. No destructors or copy constructors are called. If p == i or p == ++i, this function is a null operation.

        Throws: Nothing

        @@ -786,7 +786,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      70. -
        void splice(const_iterator p, slist & x, const_iterator first, 
        +
        void splice(const_iterator p, slist & x, const_iterator first, 
                     const_iterator last) noexcept;

        Requires: p must point to an element contained by this list. first and last must point to elements contained in list x.

        Effects: Transfers the range pointed by first and last from list x to this list, before the element pointed by p. No destructors or copy constructors are called. this' allocator and x's allocator shall compare equal.

        @@ -795,7 +795,7 @@

        Note: Iterators of values obtained from list x now point to elements of this list. Iterators of this list and all the references are not invalidated.

      71. -
        void splice(const_iterator p, slist && x, const_iterator first, 
        +
        void splice(const_iterator p, slist && x, const_iterator first, 
                     const_iterator last) noexcept;

        Requires: p must point to an element contained by this list. first and last must point to elements contained in list x. this' allocator and x's allocator shall compare equal

        Effects: Transfers the range pointed by first and last from list x to this list, before the element pointed by p. No destructors or copy constructors are called.

        @@ -806,41 +806,41 @@
      -

      -slist friend functions

      +

      +slist friend functions

      1. -
        friend bool operator==(const slist & x, const slist & y);
        +
        friend bool operator==(const slist & x, const slist & y);

        Effects: Returns true if x and y are equal

        Complexity: Linear to the number of elements in the container.

      2. -
        friend bool operator!=(const slist & x, const slist & y);
        +
        friend bool operator!=(const slist & x, const slist & y);

        Effects: Returns true if x and y are unequal

        Complexity: Linear to the number of elements in the container.

      3. -
        friend bool operator<(const slist & x, const slist & y);
        +
        friend bool operator<(const slist & x, const slist & y);

        Effects: Returns true if x is less than y

        Complexity: Linear to the number of elements in the container.

      4. -
        friend bool operator>(const slist & x, const slist & y);
        +
        friend bool operator>(const slist & x, const slist & y);

        Effects: Returns true if x is greater than y

        Complexity: Linear to the number of elements in the container.

      5. -
        friend bool operator<=(const slist & x, const slist & y);
        +
        friend bool operator<=(const slist & x, const slist & y);

        Effects: Returns true if x is equal or less than y

        Complexity: Linear to the number of elements in the container.

      6. -
        friend bool operator>=(const slist & x, const slist & y);
        +
        friend bool operator>=(const slist & x, const slist & y);

        Effects: Returns true if x is equal or greater than y

        Complexity: Linear to the number of elements in the container.

      7. -
        friend void swap(slist & x, slist & y);
        +
        friend void swap(slist & x, slist & y);

        Effects: x.swap(y)

        Complexity: Constant.

      8. @@ -858,7 +858,7 @@
        -PrevUpHomeNext +PrevUpHomeNext
        diff --git a/doc/html/boost/container/small_vector.html b/doc/html/boost/container/small_vector.html index 8d5831071a..eebfbd29b2 100644 --- a/doc/html/boost/container/small_vector.html +++ b/doc/html/boost/container/small_vector.html @@ -38,41 +38,41 @@ { public: // construct/copy/destruct - small_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit small_vector(const allocator_type &); - explicit small_vector(size_type); - small_vector(size_type, const allocator_type &); - small_vector(size_type, default_init_t); - small_vector(size_type, default_init_t, const allocator_type &); - small_vector(size_type, const value_type &); - small_vector(size_type, const value_type &, const allocator_type &); - template<typename InIt> small_vector(InIt, InIt last ); - template<typename InIt> small_vector(InIt, InIt, const allocator_type &a ); - small_vector(const small_vector &); - small_vector(const small_vector &, const allocator_type &); - explicit small_vector(const base_type &); - explicit small_vector(base_type &&); - small_vector(small_vector &&); - small_vector(small_vector &&, const allocator_type &); - small_vector(std::initializer_list< value_type >, + small_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit small_vector(const allocator_type &); + explicit small_vector(size_type); + small_vector(size_type, const allocator_type &); + small_vector(size_type, default_init_t); + small_vector(size_type, default_init_t, const allocator_type &); + small_vector(size_type, const value_type &); + small_vector(size_type, const value_type &, const allocator_type &); + template<typename InIt> small_vector(InIt, InIt last ); + template<typename InIt> small_vector(InIt, InIt, const allocator_type &a ); + small_vector(const small_vector &); + small_vector(const small_vector &, const allocator_type &); + explicit small_vector(const base_type &); + explicit small_vector(base_type &&); + small_vector(small_vector &&); + small_vector(small_vector &&, const allocator_type &); + small_vector(std::initializer_list< value_type >, const allocator_type & = allocator_type()); - small_vector & operator=(const small_vector &); - small_vector & operator=(small_vector &&); - small_vector & operator=(const base_type &); - small_vector & operator=(base_type &&); + small_vector & operator=(const small_vector &); + small_vector & operator=(small_vector &&); + small_vector & operator=(const base_type &); + small_vector & operator=(base_type &&); - // public member functions - void swap(small_vector &); + // public member functions + void swap(small_vector &); };
      -

      Description

      +

      Description

      small_vector is a vector-like container optimized for the case when it contains few elements. It contains some preallocated elements in-place, which can avoid the use of dynamic storage allocation when the actual number of elements is below that preallocated threshold.

      small_vector<T, N, Allocator> is convertible to small_vector_base<T, Allocator> that is independent from the preallocated element capacity, so client code does not need to be templated on that N argument.

      All boost::container::vector member functions are inherited. See vector documentation for details.

      -

      Template Parameters

      +

      Template Parameters

      1. typename T
        @@ -89,42 +89,42 @@
      -

      +

      small_vector public construct/copy/destruct

        -
      1. small_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
      2. -
      3. explicit small_vector(const allocator_type & a);
      4. -
      5. explicit small_vector(size_type n);
      6. -
      7. small_vector(size_type n, const allocator_type & a);
      8. -
      9. small_vector(size_type n, default_init_t);
      10. -
      11. small_vector(size_type n, default_init_t, const allocator_type & a);
      12. -
      13. small_vector(size_type n, const value_type & v);
      14. -
      15. small_vector(size_type n, const value_type & v, const allocator_type & a);
      16. +
      17. small_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
      18. +
      19. explicit small_vector(const allocator_type & a);
      20. +
      21. explicit small_vector(size_type n);
      22. +
      23. small_vector(size_type n, const allocator_type & a);
      24. +
      25. small_vector(size_type n, default_init_t);
      26. +
      27. small_vector(size_type n, default_init_t, const allocator_type & a);
      28. +
      29. small_vector(size_type n, const value_type & v);
      30. +
      31. small_vector(size_type n, const value_type & v, const allocator_type & a);
      32. template<typename InIt> 
        -  small_vector(InIt first, InIt last  BOOST_CONTAINER_DOCIGN);
      33. + small_vector(InIt first, InIt last BOOST_CONTAINER_DOCIGN);
      34. template<typename InIt> 
        -  small_vector(InIt first, InIt last, 
        +  small_vector(InIt first, InIt last, 
                        const allocator_type &a  BOOST_CONTAINER_DOCIGN);
      35. -
      36. small_vector(const small_vector & other);
      37. -
      38. small_vector(const small_vector & other, const allocator_type & a);
      39. -
      40. explicit small_vector(const base_type & other);
      41. -
      42. explicit small_vector(base_type && other);
      43. -
      44. small_vector(small_vector && other);
      45. -
      46. small_vector(small_vector && other, const allocator_type & a);
      47. -
      48. small_vector(std::initializer_list< value_type > il, 
        +
      49. small_vector(const small_vector & other);
      50. +
      51. small_vector(const small_vector & other, const allocator_type & a);
      52. +
      53. explicit small_vector(const base_type & other);
      54. +
      55. explicit small_vector(base_type && other);
      56. +
      57. small_vector(small_vector && other);
      58. +
      59. small_vector(small_vector && other, const allocator_type & a);
      60. +
      61. small_vector(std::initializer_list< value_type > il, 
                      const allocator_type & a = allocator_type());
      62. -
      63. small_vector & operator=(const small_vector & other);
      64. -
      65. small_vector & operator=(small_vector && other);
      66. -
      67. small_vector & operator=(const base_type & other);
      68. -
      69. small_vector & operator=(base_type && other);
      70. +
      71. small_vector & operator=(const small_vector & other);
      72. +
      73. small_vector & operator=(small_vector && other);
      74. +
      75. small_vector & operator=(const base_type & other);
      76. +
      77. small_vector & operator=(base_type && other);
      -

      -small_vector public member functions

      -
      1. void swap(small_vector & other);
      +

      +small_vector public member functions

      +
      1. void swap(small_vector & other);
      diff --git a/doc/html/boost/container/small_vector_allocator.html b/doc/html/boost/container/small_vector_allocator.html index 9672b8e540..2fc6fb5afb 100644 --- a/doc/html/boost/container/small_vector_allocator.html +++ b/doc/html/boost/container/small_vector_allocator.html @@ -45,9 +45,9 @@ typedef allocator_traits< Allocator >::difference_type difference_type; typedef allocator_traits< Allocator >::void_pointer void_pointer; typedef allocator_traits< Allocator >::const_void_pointer const_void_pointer; - typedef allocator_traits< Allocator >::propagate_on_container_copy_assignment propagate_on_container_copy_assignment; - typedef allocator_traits< Allocator >::propagate_on_container_move_assignment propagate_on_container_move_assignment; - typedef allocator_traits< Allocator >::propagate_on_container_swap propagate_on_container_swap; + typedef allocator_traits< Allocator >::propagate_on_container_copy_assignment propagate_on_container_copy_assignment; + typedef allocator_traits< Allocator >::propagate_on_container_move_assignment propagate_on_container_move_assignment; + typedef allocator_traits< Allocator >::propagate_on_container_swap propagate_on_container_swap; typedef implementation_defined is_always_equal; // An integral constant with member value == false typedef implementation_defined is_partially_propagable; // An integral constant with member value == true @@ -59,38 +59,38 @@ }; // construct/copy/destruct - template<class... Args> explicit small_vector_allocator(Args &&...); - small_vector_allocator(const small_vector_allocator &) noexcept; - small_vector_allocator(small_vector_allocator &&) noexcept; + template<class... Args> explicit small_vector_allocator(Args &&...); + small_vector_allocator(const small_vector_allocator &) noexcept; + small_vector_allocator(small_vector_allocator &&) noexcept; template<typename OtherAllocator> - small_vector_allocator(const small_vector_allocator< OtherAllocator > &) noexcept; + small_vector_allocator(const small_vector_allocator< OtherAllocator > &) noexcept; template<typename OtherAllocator> - small_vector_allocator(small_vector_allocator< OtherAllocator > &&) noexcept; - small_vector_allocator & operator=(const small_vector_allocator &) noexcept; - small_vector_allocator & operator=(small_vector_allocator &&) noexcept; + small_vector_allocator(small_vector_allocator< OtherAllocator > &&) noexcept; + small_vector_allocator & operator=(const small_vector_allocator &) noexcept; + small_vector_allocator & operator=(small_vector_allocator &&) noexcept; template<typename OtherAllocator> small_vector_allocator & - operator=(const small_vector_allocator< OtherAllocator > &) noexcept; + operator=(const small_vector_allocator< OtherAllocator > &) noexcept; template<typename OtherAllocator> small_vector_allocator & - operator=(small_vector_allocator< OtherAllocator > &&) noexcept; + operator=(small_vector_allocator< OtherAllocator > &&) noexcept; - // public member functions - pointer allocate(size_type, const_void_pointer = const_void_pointer()); - void deallocate(pointer, size_type) noexcept; - size_type max_size() const noexcept; - small_vector_allocator select_on_container_copy_construction() const; - bool storage_is_unpropagable(pointer) const; + // public member functions + pointer allocate(size_type, const_void_pointer = const_void_pointer()); + void deallocate(pointer, size_type) noexcept; + size_type max_size() const noexcept; + small_vector_allocator select_on_container_copy_construction() const; + bool storage_is_unpropagable(pointer) const; - // friend functions - friend void swap(small_vector_allocator &, small_vector_allocator &) noexcept; - friend bool operator==(const small_vector_allocator &, + // friend functions + friend void swap(small_vector_allocator &, small_vector_allocator &) noexcept; + friend bool operator==(const small_vector_allocator &, const small_vector_allocator &) noexcept; - friend bool operator!=(const small_vector_allocator &, + friend bool operator!=(const small_vector_allocator &, const small_vector_allocator &) noexcept; };
      -

      Description

      +

      Description

      A non-standard allocator used to implement small_vector. Users should never use it directly. It is described here for documentation purposes.

      This allocator inherits from a standard-conforming allocator and forwards member functions to the standard allocator except when internal storage is being used as memory source.

      This allocator is a "partially_propagable" allocator and defines is_partially_propagable as true_type.

      @@ -98,88 +98,88 @@

      boost::container::vector supports partially propagable allocators fallbacking to deep copy/swap/move operations when internal storage is being used to store vector elements.

      small_vector_allocator assumes that will be instantiated as boost::container::vector< T, small_vector_allocator<Allocator> > and internal storage can be obtained downcasting that vector to small_vector_base<T>.

      -

      +

      small_vector_allocator public construct/copy/destruct

      1. -
        template<class... Args> explicit small_vector_allocator(Args &&... args);
        Constructor from arbitrary arguments.
      2. +
        template<class... Args> explicit small_vector_allocator(Args &&... args);
        Constructor from arbitrary arguments.
      3. -
        small_vector_allocator(const small_vector_allocator & other) noexcept;
        +
        small_vector_allocator(const small_vector_allocator & other) noexcept;

        Constructor from other small_vector_allocator. Never throws

      4. -
        small_vector_allocator(small_vector_allocator && other) noexcept;
        +
        small_vector_allocator(small_vector_allocator && other) noexcept;

        Move constructor from small_vector_allocator. Never throws

      5. template<typename OtherAllocator> 
        -  small_vector_allocator(const small_vector_allocator< OtherAllocator > & other) noexcept;
        + small_vector_allocator(const small_vector_allocator< OtherAllocator > & other) noexcept;

        Constructor from related small_vector_allocator. Never throws

      6. template<typename OtherAllocator> 
        -  small_vector_allocator(small_vector_allocator< OtherAllocator > && other) noexcept;
        + small_vector_allocator(small_vector_allocator< OtherAllocator > && other) noexcept;

        Move constructor from related small_vector_allocator. Never throws

      7. small_vector_allocator & 
        -operator=(const small_vector_allocator & other) noexcept;
        +operator=(const small_vector_allocator & other) noexcept;

        Assignment from other small_vector_allocator. Never throws

      8. -
        small_vector_allocator & operator=(small_vector_allocator && other) noexcept;
        +
        small_vector_allocator & operator=(small_vector_allocator && other) noexcept;

        Move constructor from other small_vector_allocator. Never throws

      9. template<typename OtherAllocator> 
           small_vector_allocator & 
        -  operator=(const small_vector_allocator< OtherAllocator > & other) noexcept;
        + operator=(const small_vector_allocator< OtherAllocator > & other) noexcept;

        Assignment from related small_vector_allocator. Never throws

      10. template<typename OtherAllocator> 
           small_vector_allocator & 
        -  operator=(small_vector_allocator< OtherAllocator > && other) noexcept;
        + operator=(small_vector_allocator< OtherAllocator > && other) noexcept;

        Move assignment from related small_vector_allocator. Never throws

      -

      -small_vector_allocator public member functions

      +

      +small_vector_allocator public member functions

      1. -
        pointer allocate(size_type count, 
        +
        pointer allocate(size_type count, 
                          const_void_pointer hint = const_void_pointer());
        Allocates storage from the standard-conforming allocator.
      2. -
        void deallocate(pointer ptr, size_type n) noexcept;
        +
        void deallocate(pointer ptr, size_type n) noexcept;

        Deallocates previously allocated memory. Never throws

      3. -
        size_type max_size() const noexcept;
        +
        size_type max_size() const noexcept;

        Returns the maximum number of elements that could be allocated. Never throws

      4. -
      5. small_vector_allocator select_on_container_copy_construction() const;
      6. -
      7. bool storage_is_unpropagable(pointer p) const;
      8. +
      9. small_vector_allocator select_on_container_copy_construction() const;
      10. +
      11. bool storage_is_unpropagable(pointer p) const;
      -

      -small_vector_allocator friend functions

      +

      +small_vector_allocator friend functions

      1. -
        friend void swap(small_vector_allocator & l, small_vector_allocator & r) noexcept;
        +
        friend void swap(small_vector_allocator & l, small_vector_allocator & r) noexcept;

        Swaps two allocators, does nothing because this small_vector_allocator is stateless

      2. -
        friend bool operator==(const small_vector_allocator & l, 
        +
        friend bool operator==(const small_vector_allocator & l, 
                                const small_vector_allocator & r) noexcept;

        An small_vector_allocator always compares to true, as memory allocated with one instance can be deallocated by another instance (except for unpropagable storage)

      3. -
        friend bool operator!=(const small_vector_allocator & l, 
        +
        friend bool operator!=(const small_vector_allocator & l, 
                                const small_vector_allocator & r) noexcept;

        An small_vector_allocator always compares to false, as memory allocated with one instance can be deallocated by another instance

      4. diff --git a/doc/html/boost/container/small_vector_allocator/rebind.html b/doc/html/boost/container/small_vector_allocator/rebind.html index 57b35e45d8..e375f4a609 100644 --- a/doc/html/boost/container/small_vector_allocator/rebind.html +++ b/doc/html/boost/container/small_vector_allocator/rebind.html @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@
        -PrevUpHomeNext +PrevUpHomeNext
        @@ -39,7 +39,7 @@ typedef allocator_traits< Allocator >::template rebind_alloc< T2 >::type other; };
        -

        Description

        +

        Description

        Obtains an small_vector_allocator that allocates objects of type T2

      @@ -53,7 +53,7 @@
      -PrevUpHomeNext +PrevUpHomeNext
      diff --git a/doc/html/boost/container/small_vector_base.html b/doc/html/boost/container/small_vector_base.html index ba859f89af..76b4e60436 100644 --- a/doc/html/boost/container/small_vector_base.html +++ b/doc/html/boost/container/small_vector_base.html @@ -37,14 +37,14 @@ { public: // construct/copy/destruct - small_vector_base & operator=(const small_vector_base &); - small_vector_base & operator=(small_vector_base &&); + small_vector_base & operator=(const small_vector_base &); + small_vector_base & operator=(small_vector_base &&); - // public member functions - void swap(small_vector_base &); + // public member functions + void swap(small_vector_base &); };
      -

      Description

      +

      Description

      This class consists of common code from all small_vector<T, N> types that don't depend on the "N" template parameter. This class is non-copyable and non-destructible, so this class typically used as reference argument to functions that read or write small vectors. Since small_vector<T, N> derives from small_vector_base<T>, the conversion to small_vector_base is implicit

      //Clients can pass any small_vector<Foo, N>.
       void read_any_small_vector_of_foo(const small_vector_base<Foo> &in_parameter);
      @@ -64,19 +64,19 @@
       

      All boost::container:vector member functions are inherited. See vector documentation for details.

      -

      +

      small_vector_base public construct/copy/destruct

        -
      1. small_vector_base & operator=(const small_vector_base & other);
      2. -
      3. small_vector_base & operator=(small_vector_base && other);
      4. +
      5. small_vector_base & operator=(const small_vector_base & other);
      6. +
      7. small_vector_base & operator=(small_vector_base && other);
      -

      -small_vector_base public member functions

      -
      1. void swap(small_vector_base & other);
      +

      +small_vector_base public member functions

      +
      1. void swap(small_vector_base & other);
      diff --git a/doc/html/boost/container/stable_vector.html b/doc/html/boost/container/stable_vector.html index 6d6fc1f069..17ee07c4d3 100644 --- a/doc/html/boost/container/stable_vector.html +++ b/doc/html/boost/container/stable_vector.html @@ -51,96 +51,96 @@ typedef implementation_defined const_reverse_iterator; // construct/copy/destruct - stable_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit stable_vector(const allocator_type &) noexcept; - explicit stable_vector(size_type); - stable_vector(size_type, default_init_t); - explicit stable_vector(size_type, const allocator_type &); - stable_vector(size_type, default_init_t, const allocator_type &); - stable_vector(size_type, const T &, + stable_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit stable_vector(const allocator_type &) noexcept; + explicit stable_vector(size_type); + stable_vector(size_type, default_init_t); + explicit stable_vector(size_type, const allocator_type &); + stable_vector(size_type, default_init_t, const allocator_type &); + stable_vector(size_type, const T &, const allocator_type & = allocator_type()); template<typename InputIterator> - stable_vector(InputIterator, InputIterator, + stable_vector(InputIterator, InputIterator, const allocator_type & = allocator_type()); - stable_vector(const stable_vector &); - stable_vector(std::initializer_list< value_type >, + stable_vector(const stable_vector &); + stable_vector(std::initializer_list< value_type >, const allocator_type & = allocator_type()); - stable_vector(stable_vector &&) noexcept; - stable_vector(const stable_vector &, const allocator_type &); - stable_vector(stable_vector &&, const allocator_type &); - stable_vector & operator=(const stable_vector &); + stable_vector(stable_vector &&) noexcept; + stable_vector(const stable_vector &, const allocator_type &); + stable_vector(stable_vector &&, const allocator_type &); + stable_vector & operator=(const stable_vector &); stable_vector & - operator=(stable_vector &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); - stable_vector & operator=(std::initializer_list< value_type >); - ~stable_vector(); + operator=(stable_vector &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); + stable_vector & operator=(std::initializer_list< value_type >); + ~stable_vector(); - // public member functions - void assign(size_type, const T &); - template<typename InputIterator> void assign(InputIterator, InputIterator); - void assign(std::initializer_list< value_type >); - allocator_type get_allocator() const; - const stored_allocator_type & get_stored_allocator() const noexcept; - stored_allocator_type & get_stored_allocator() noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_iterator cbegin() const noexcept; - const_iterator cend() const noexcept; - const_reverse_iterator crbegin() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const noexcept; - size_type size() const noexcept; - size_type max_size() const noexcept; - void resize(size_type); - void resize(size_type, default_init_t); - void resize(size_type, const T &); - size_type capacity() const noexcept; - void reserve(size_type); - void shrink_to_fit(); - reference front() noexcept; - const_reference front() const noexcept; - reference back() noexcept; - const_reference back() const noexcept; - reference operator[](size_type) noexcept; - const_reference operator[](size_type) const noexcept; - iterator nth(size_type) noexcept; - const_iterator nth(size_type) const noexcept; - size_type index_of(iterator) noexcept; - size_type index_of(const_iterator) const noexcept; - reference at(size_type); - const_reference at(size_type) const; - template<class... Args> reference emplace_back(Args &&...); - template<class... Args> iterator emplace(const_iterator, Args &&...); - void push_back(const T &); - void push_back(T &&); - iterator insert(const_iterator, const T &); - iterator insert(const_iterator, T &&); - iterator insert(const_iterator, size_type, const T &); - iterator insert(const_iterator, std::initializer_list< value_type >); + // public member functions + void assign(size_type, const T &); + template<typename InputIterator> void assign(InputIterator, InputIterator); + void assign(std::initializer_list< value_type >); + allocator_type get_allocator() const; + const stored_allocator_type & get_stored_allocator() const noexcept; + stored_allocator_type & get_stored_allocator() noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const noexcept; + size_type size() const noexcept; + size_type max_size() const noexcept; + void resize(size_type); + void resize(size_type, default_init_t); + void resize(size_type, const T &); + size_type capacity() const noexcept; + void reserve(size_type); + void shrink_to_fit(); + reference front() noexcept; + const_reference front() const noexcept; + reference back() noexcept; + const_reference back() const noexcept; + reference operator[](size_type) noexcept; + const_reference operator[](size_type) const noexcept; + iterator nth(size_type) noexcept; + const_iterator nth(size_type) const noexcept; + size_type index_of(iterator) noexcept; + size_type index_of(const_iterator) const noexcept; + reference at(size_type); + const_reference at(size_type) const; + template<class... Args> reference emplace_back(Args &&...); + template<class... Args> iterator emplace(const_iterator, Args &&...); + void push_back(const T &); + void push_back(T &&); + iterator insert(const_iterator, const T &); + iterator insert(const_iterator, T &&); + iterator insert(const_iterator, size_type, const T &); + iterator insert(const_iterator, std::initializer_list< value_type >); template<typename InputIterator> - iterator insert(const_iterator, InputIterator, InputIterator); - void pop_back() noexcept; - iterator erase(const_iterator) noexcept; - iterator erase(const_iterator, const_iterator) noexcept; - void swap(stable_vector &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); - void clear() noexcept; + iterator insert(const_iterator, InputIterator, InputIterator); + void pop_back() noexcept; + iterator erase(const_iterator) noexcept; + iterator erase(const_iterator, const_iterator) noexcept; + void swap(stable_vector &) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)); + void clear() noexcept; - // friend functions - friend bool operator==(const stable_vector &, const stable_vector &); - friend bool operator!=(const stable_vector &, const stable_vector &); - friend bool operator<(const stable_vector &, const stable_vector &); - friend bool operator>(const stable_vector &, const stable_vector &); - friend bool operator<=(const stable_vector &, const stable_vector &); - friend bool operator>=(const stable_vector &, const stable_vector &); - friend void swap(stable_vector &, stable_vector &); + // friend functions + friend bool operator==(const stable_vector &, const stable_vector &); + friend bool operator!=(const stable_vector &, const stable_vector &); + friend bool operator<(const stable_vector &, const stable_vector &); + friend bool operator>(const stable_vector &, const stable_vector &); + friend bool operator<=(const stable_vector &, const stable_vector &); + friend bool operator>=(const stable_vector &, const stable_vector &); + friend void swap(stable_vector &, stable_vector &); };
    -

    Description

    +

    Description

    Originally developed by Joaquin M. Lopez Munoz, stable_vector is a std::vector drop-in replacement implemented as a node container, offering iterator and reference stability.

    Here are the details taken from the author's blog (Introducing stable_vector):

    We present stable_vector, a fully STL-compliant stable container that provides most of the features of std::vector except element contiguity.

    @@ -150,7 +150,7 @@

    -

    Template Parameters

    +

    Template Parameters

    1. typename T
      @@ -163,51 +163,51 @@
    -

    +

    stable_vector public construct/copy/destruct

    1. -
      stable_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
      +
      stable_vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));

      Effects: Default constructs a stable_vector.

      Throws: If allocator_type's default constructor throws.

      Complexity: Constant.

    2. -
      explicit stable_vector(const allocator_type & al) noexcept;
      +
      explicit stable_vector(const allocator_type & al) noexcept;

      Effects: Constructs a stable_vector taking the allocator as parameter.

      Throws: Nothing

      Complexity: Constant.

    3. -
      explicit stable_vector(size_type n);
      +
      explicit stable_vector(size_type n);

      Effects: Constructs a stable_vector and inserts n value initialized values.

      Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

      Complexity: Linear to n.

    4. -
      stable_vector(size_type n, default_init_t);
      +
      stable_vector(size_type n, default_init_t);

      Effects: Constructs a stable_vector and inserts n default initialized values.

      Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

      Complexity: Linear to n.

      Note: Non-standard extension

    5. -
      explicit stable_vector(size_type n, const allocator_type & a);
      +
      explicit stable_vector(size_type n, const allocator_type & a);

      Effects: Constructs a stable_vector that will use a copy of allocator a and inserts n value initialized values.

      Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

      Complexity: Linear to n.

    6. -
      stable_vector(size_type n, default_init_t, const allocator_type & a);
      +
      stable_vector(size_type n, default_init_t, const allocator_type & a);

      Effects: Constructs a stable_vector that will use a copy of allocator a and inserts n default initialized values.

      Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

      Complexity: Linear to n.

      Note: Non-standard extension

    7. -
      stable_vector(size_type n, const T & t, 
      +
      stable_vector(size_type n, const T & t, 
                     const allocator_type & al = allocator_type());

      Effects: Constructs a stable_vector that will use a copy of allocator a and inserts n copies of value.

      Throws: If allocator_type's default constructor throws or T's default or copy constructor throws.

      @@ -215,45 +215,45 @@
    8. template<typename InputIterator> 
      -  stable_vector(InputIterator first, InputIterator last, 
      +  stable_vector(InputIterator first, InputIterator last, 
                       const allocator_type & al = allocator_type());

      Effects: Constructs a stable_vector that will use a copy of allocator a and inserts a copy of the range [first, last) in the stable_vector.

      Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced InIt throws.

      Complexity: Linear to the range [first, last).

    9. -
      stable_vector(const stable_vector & x);
      +
      stable_vector(const stable_vector & x);

      Effects: Copy constructs a stable_vector.

      Postcondition: x == *this.

      Complexity: Linear to the elements x contains.

    10. -
      stable_vector(std::initializer_list< value_type > il, 
      +
      stable_vector(std::initializer_list< value_type > il, 
                     const allocator_type & l = allocator_type());

      Effects: Constructs a stable_vector that will use a copy of allocator a and inserts a copy of the range [il.begin(), il.last()) in the stable_vector

      Throws: If allocator_type's default constructor throws or T's constructor taking a dereferenced initializer_list iterator throws.

      Complexity: Linear to the range [il.begin(), il.end()).

    11. -
      stable_vector(stable_vector && x) noexcept;
      +
      stable_vector(stable_vector && x) noexcept;

      Effects: Move constructor. Moves x's resources to *this.

      Throws: If allocator_type's copy constructor throws.

      Complexity: Constant.

    12. -
      stable_vector(const stable_vector & x, const allocator_type & a);
      +
      stable_vector(const stable_vector & x, const allocator_type & a);

      Effects: Copy constructs a stable_vector using the specified allocator.

      Postcondition: x == *this.

      Complexity: Linear to the elements x contains.

    13. -
      stable_vector(stable_vector && x, const allocator_type & a);
      +
      stable_vector(stable_vector && x, const allocator_type & a);

      Effects: Move constructor using the specified allocator. Moves x's resources to *this.

      Throws: If allocator_type's copy constructor throws.

      Complexity: Constant if a == x.get_allocator(), linear otherwise

    14. -
      stable_vector & operator=(const stable_vector & x);
      +
      stable_vector & operator=(const stable_vector & x);

      Effects: Makes *this contain the same elements as x.

      Postcondition: this->size() == x.size(). *this contains a copy of each of x's elements.

      Throws: If memory allocation throws or T's copy constructor throws.

      @@ -261,19 +261,19 @@
    15. stable_vector & 
      -operator=(stable_vector && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));
      +operator=(stable_vector && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));

      Effects: Move assignment. All x's values are transferred to *this.

      Postcondition: x.empty(). *this contains a the elements x had before the function.

      Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or T's move constructor throws)

      Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

    16. -
      stable_vector & operator=(std::initializer_list< value_type > il);
      +
      stable_vector & operator=(std::initializer_list< value_type > il);

      Effects: Make *this container contains elements from il.

      Complexity: Linear to the range [il.begin(), il.end()).

    17. -
      ~stable_vector();
      +
      ~stable_vector();

      Effects: Destroys the stable_vector. All stored values are destroyed and used memory is deallocated.

      Throws: Nothing.

      Complexity: Linear to the number of elements.

      @@ -281,217 +281,217 @@
    -

    -stable_vector public member functions

    +

    +stable_vector public member functions

    1. -
      void assign(size_type n, const T & t);
      +
      void assign(size_type n, const T & t);

      Effects: Assigns the n copies of val to *this.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Linear to n.

    2. template<typename InputIterator> 
      -  void assign(InputIterator first, InputIterator last);
      + void assign(InputIterator first, InputIterator last);

      Effects: Assigns the the range [first, last) to *this.

      Throws: If memory allocation throws or T's constructor from dereferencing InpIt throws.

      Complexity: Linear to n.

    3. -
      void assign(std::initializer_list< value_type > il);
      +
      void assign(std::initializer_list< value_type > il);

      Effects: Assigns the the range [il.begin(), il.end()) to *this.

      Throws: If memory allocation throws or T's constructor from dereferencing initializer_list iterator throws.

    4. -
      allocator_type get_allocator() const;
      +
      allocator_type get_allocator() const;

      Effects: Returns a copy of the internal allocator.

      Throws: If allocator's copy constructor throws.

      Complexity: Constant.

    5. -
      const stored_allocator_type & get_stored_allocator() const noexcept;
      +
      const stored_allocator_type & get_stored_allocator() const noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    6. -
      stored_allocator_type & get_stored_allocator() noexcept;
      +
      stored_allocator_type & get_stored_allocator() noexcept;

      Effects: Returns a reference to the internal allocator.

      Throws: Nothing

      Complexity: Constant.

      Note: Non-standard extension.

    7. -
      iterator begin() noexcept;
      +
      iterator begin() noexcept;

      Effects: Returns an iterator to the first element contained in the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    8. -
      const_iterator begin() const noexcept;
      +
      const_iterator begin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    9. -
      iterator end() noexcept;
      +
      iterator end() noexcept;

      Effects: Returns an iterator to the end of the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    10. -
      const_iterator end() const noexcept;
      +
      const_iterator end() const noexcept;

      Effects: Returns a const_iterator to the end of the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    11. -
      reverse_iterator rbegin() noexcept;
      +
      reverse_iterator rbegin() noexcept;

      Effects: Returns a reverse_iterator pointing to the beginning of the reversed stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    12. -
      const_reverse_iterator rbegin() const noexcept;
      +
      const_reverse_iterator rbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    13. -
      reverse_iterator rend() noexcept;
      +
      reverse_iterator rend() noexcept;

      Effects: Returns a reverse_iterator pointing to the end of the reversed stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    14. -
      const_reverse_iterator rend() const noexcept;
      +
      const_reverse_iterator rend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    15. -
      const_iterator cbegin() const noexcept;
      +
      const_iterator cbegin() const noexcept;

      Effects: Returns a const_iterator to the first element contained in the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    16. -
      const_iterator cend() const noexcept;
      +
      const_iterator cend() const noexcept;

      Effects: Returns a const_iterator to the end of the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    17. -
      const_reverse_iterator crbegin() const noexcept;
      +
      const_reverse_iterator crbegin() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    18. -
      const_reverse_iterator crend() const noexcept;
      +
      const_reverse_iterator crend() const noexcept;

      Effects: Returns a const_reverse_iterator pointing to the end of the reversed stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    19. -
      bool empty() const noexcept;
      +
      bool empty() const noexcept;

      Effects: Returns true if the stable_vector contains no elements.

      Throws: Nothing.

      Complexity: Constant.

    20. -
      size_type size() const noexcept;
      +
      size_type size() const noexcept;

      Effects: Returns the number of the elements contained in the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    21. -
      size_type max_size() const noexcept;
      +
      size_type max_size() const noexcept;

      Effects: Returns the largest possible size of the stable_vector.

      Throws: Nothing.

      Complexity: Constant.

    22. -
      void resize(size_type n);
      +
      void resize(size_type n);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are value initialized.

      Throws: If memory allocation throws, or T's value initialization throws.

      Complexity: Linear to the difference between size() and new_size.

    23. -
      void resize(size_type n, default_init_t);
      +
      void resize(size_type n, default_init_t);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are default initialized.

      Throws: If memory allocation throws, or T's default initialization throws.

      Complexity: Linear to the difference between size() and new_size.

      Note: Non-standard extension

    24. -
      void resize(size_type n, const T & t);
      +
      void resize(size_type n, const T & t);

      Effects: Inserts or erases elements at the end such that the size becomes n. New elements are copy constructed from x.

      Throws: If memory allocation throws, or T's copy constructor throws.

      Complexity: Linear to the difference between size() and new_size.

    25. -
      size_type capacity() const noexcept;
      +
      size_type capacity() const noexcept;

      Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

      Throws: Nothing.

      Complexity: Constant.

    26. -
      void reserve(size_type n);
      +
      void reserve(size_type n);

      Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

      Throws: If memory allocation allocation throws.

    27. -
      void shrink_to_fit();
      +
      void shrink_to_fit();

      Effects: Tries to deallocate the excess of memory created with previous allocations. The size of the stable_vector is unchanged

      Throws: If memory allocation throws.

      Complexity: Linear to size().

    28. -
      reference front() noexcept;
      +
      reference front() noexcept;

      Requires: !empty()

      Effects: Returns a reference to the first element of the container.

      Throws: Nothing.

      Complexity: Constant.

    29. -
      const_reference front() const noexcept;
      +
      const_reference front() const noexcept;

      Requires: !empty()

      Effects: Returns a const reference to the first element of the container.

      Throws: Nothing.

      Complexity: Constant.

    30. -
      reference back() noexcept;
      +
      reference back() noexcept;

      Requires: !empty()

      Effects: Returns a reference to the last element of the container.

      Throws: Nothing.

      Complexity: Constant.

    31. -
      const_reference back() const noexcept;
      +
      const_reference back() const noexcept;

      Requires: !empty()

      Effects: Returns a const reference to the last element of the container.

      Throws: Nothing.

      Complexity: Constant.

    32. -
      reference operator[](size_type n) noexcept;
      +
      reference operator[](size_type n) noexcept;

      Requires: size() > n.

      Effects: Returns a reference to the nth element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    33. -
      const_reference operator[](size_type n) const noexcept;
      +
      const_reference operator[](size_type n) const noexcept;

      Requires: size() > n.

      Effects: Returns a const reference to the nth element from the beginning of the container.

      Throws: Nothing.

      Complexity: Constant.

    34. -
      iterator nth(size_type n) noexcept;
      +
      iterator nth(size_type n) noexcept;

      Requires: size() >= n.

      Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

      Throws: Nothing.

      @@ -499,7 +499,7 @@

      Note: Non-standard extension

    35. -
      const_iterator nth(size_type n) const noexcept;
      +
      const_iterator nth(size_type n) const noexcept;

      Requires: size() >= n.

      Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

      Throws: Nothing.

      @@ -507,7 +507,7 @@

      Note: Non-standard extension

    36. -
      size_type index_of(iterator p) noexcept;
      +
      size_type index_of(iterator p) noexcept;

      Requires: begin() <= p <= end().

      Effects: Returns the index of the element pointed by p and size() if p == end().

      Throws: Nothing.

      @@ -515,7 +515,7 @@

      Note: Non-standard extension

    37. -
      size_type index_of(const_iterator p) const noexcept;
      +
      size_type index_of(const_iterator p) const noexcept;

      Requires: begin() <= p <= end().

      Effects: Returns the index of the element pointed by p and size() if p == end().

      Throws: Nothing.

      @@ -523,47 +523,47 @@

      Note: Non-standard extension

    38. -
      reference at(size_type n);
      +
      reference at(size_type n);

      Requires: size() > n.

      Effects: Returns a reference to the nth element from the beginning of the container.

      Throws: std::range_error if n >= size()

      Complexity: Constant.

    39. -
      const_reference at(size_type n) const;
      +
      const_reference at(size_type n) const;

      Requires: size() > n.

      Effects: Returns a const reference to the nth element from the beginning of the container.

      Throws: std::range_error if n >= size()

      Complexity: Constant.

    40. -
      template<class... Args> reference emplace_back(Args &&... args);
      +
      template<class... Args> reference emplace_back(Args &&... args);

      Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the end of the stable_vector.

      Returns: A reference to the created object.

      Throws: If memory allocation throws or the in-place constructor throws.

      Complexity: Amortized constant time.

    41. -
      template<class... Args> iterator emplace(const_iterator p, Args &&... args);
      +
      template<class... Args> iterator emplace(const_iterator p, Args &&... args);

      Requires: p must be a valid iterator of *this.

      Effects: Inserts an object of type T constructed with std::forward<Args>(args)... before p

      Throws: If memory allocation throws or the in-place constructor throws.

      Complexity: If p is end(), amortized constant time Linear time otherwise.

    42. -
      void push_back(const T & x);
      +
      void push_back(const T & x);

      Effects: Inserts a copy of x at the end of the stable_vector.

      Throws: If memory allocation throws or T's copy constructor throws.

      Complexity: Amortized constant time.

    43. -
      void push_back(T && x);
      +
      void push_back(T && x);

      Effects: Constructs a new element in the end of the stable_vector and moves the resources of x to this new element.

      Throws: If memory allocation throws.

      Complexity: Amortized constant time.

    44. -
      iterator insert(const_iterator p, const T & x);
      +
      iterator insert(const_iterator p, const T & x);

      Requires: p must be a valid iterator of *this.

      Effects: Insert a copy of x before p.

      Returns: An iterator to the inserted element.

      @@ -571,7 +571,7 @@

      Complexity: If p is end(), amortized constant time Linear time otherwise.

    45. -
      iterator insert(const_iterator p, T && x);
      +
      iterator insert(const_iterator p, T && x);

      Requires: p must be a valid iterator of *this.

      Effects: Insert a new element before p with x's resources.

      Returns: an iterator to the inserted element.

      @@ -579,7 +579,7 @@

      Complexity: If p is end(), amortized constant time Linear time otherwise.

    46. -
      iterator insert(const_iterator p, size_type n, const T & t);
      +
      iterator insert(const_iterator p, size_type n, const T & t);

      Requires: p must be a valid iterator of *this.

      Effects: Insert n copies of x before p.

      Returns: an iterator to the first inserted element or p if n is 0.

      @@ -587,7 +587,7 @@

      Complexity: Linear to n.

    47. -
      iterator insert(const_iterator p, std::initializer_list< value_type > il);
      +
      iterator insert(const_iterator p, std::initializer_list< value_type > il);
      Requires: p must be a valid iterator of *this.

      Requires: p must be a valid iterator of *this.

      Effects: Insert a copy of the [il.begin(), il.end()) range before p.

      Returns: an iterator to the first inserted element or p if first == last.

      @@ -595,7 +595,7 @@
    48. template<typename InputIterator> 
      -  iterator insert(const_iterator p, InputIterator first, InputIterator last);
      + iterator insert(const_iterator p, InputIterator first, InputIterator last);

      Requires: pos must be a valid iterator of *this.

      Effects: Insert a copy of the [first, last) range before p.

      Returns: an iterator to the first inserted element or p if first == last.

      @@ -603,31 +603,31 @@

      Complexity: Linear to distance [first, last).

    49. -
      void pop_back() noexcept;
      +
      void pop_back() noexcept;

      Effects: Removes the last element from the stable_vector.

      Throws: Nothing.

      Complexity: Constant time.

    50. -
      iterator erase(const_iterator p) noexcept;
      +
      iterator erase(const_iterator p) noexcept;

      Effects: Erases the element at p.

      Throws: Nothing.

      Complexity: Linear to the elements between p and the last element. Constant if p is the last element.

    51. -
      iterator erase(const_iterator first, const_iterator last) noexcept;
      +
      iterator erase(const_iterator first, const_iterator last) noexcept;

      Effects: Erases the elements pointed by [first, last).

      Throws: Nothing.

      Complexity: Linear to the distance between first and last plus linear to the elements between p and the last element.

    52. -
      void swap(stable_vector & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));
      +
      void swap(stable_vector & x) noexcept(allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value));

      Effects: Swaps the contents of *this and x.

      Throws: Nothing.

      Complexity: Constant.

    53. -
      void clear() noexcept;
      +
      void clear() noexcept;

      Effects: Erases all the elements of the stable_vector.

      Throws: Nothing.

      Complexity: Linear to the number of elements in the stable_vector.

      @@ -635,41 +635,41 @@
    -

    -stable_vector friend functions

    +

    +stable_vector friend functions

    1. -
      friend bool operator==(const stable_vector & x, const stable_vector & y);
      +
      friend bool operator==(const stable_vector & x, const stable_vector & y);

      Effects: Returns true if x and y are equal

      Complexity: Linear to the number of elements in the container.

    2. -
      friend bool operator!=(const stable_vector & x, const stable_vector & y);
      +
      friend bool operator!=(const stable_vector & x, const stable_vector & y);

      Effects: Returns true if x and y are unequal

      Complexity: Linear to the number of elements in the container.

    3. -
      friend bool operator<(const stable_vector & x, const stable_vector & y);
      +
      friend bool operator<(const stable_vector & x, const stable_vector & y);

      Effects: Returns true if x is less than y

      Complexity: Linear to the number of elements in the container.

    4. -
      friend bool operator>(const stable_vector & x, const stable_vector & y);
      +
      friend bool operator>(const stable_vector & x, const stable_vector & y);

      Effects: Returns true if x is greater than y

      Complexity: Linear to the number of elements in the container.

    5. -
      friend bool operator<=(const stable_vector & x, const stable_vector & y);
      +
      friend bool operator<=(const stable_vector & x, const stable_vector & y);

      Effects: Returns true if x is equal or less than y

      Complexity: Linear to the number of elements in the container.

    6. -
      friend bool operator>=(const stable_vector & x, const stable_vector & y);
      +
      friend bool operator>=(const stable_vector & x, const stable_vector & y);

      Effects: Returns true if x is equal or greater than y

      Complexity: Linear to the number of elements in the container.

    7. -
      friend void swap(stable_vector & x, stable_vector & y);
      +
      friend void swap(stable_vector & x, stable_vector & y);

      Effects: x.swap(y)

      Complexity: Constant.

    8. diff --git a/doc/html/boost/container/static_vector.html b/doc/html/boost/container/static_vector.html index 4e27b8e3d9..dfb334d5fb 100644 --- a/doc/html/boost/container/static_vector.html +++ b/doc/html/boost/container/static_vector.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@

      -PrevUpHomeNext +PrevUpHomeNext
      @@ -49,88 +49,91 @@ typedef base_t::const_reverse_iterator const_reverse_iterator; // The const reverse iterator. // construct/copy/destruct - static_vector() noexcept; - explicit static_vector(size_type); - static_vector(size_type, default_init_t); - static_vector(size_type, value_type const &); - template<typename Iterator> static_vector(Iterator, Iterator); - static_vector(std::initializer_list< value_type >); - static_vector(static_vector const &); + static_vector() noexcept; + explicit static_vector(size_type); + static_vector(size_type, default_init_t); + static_vector(size_type, value_type const &); + template<typename Iterator> static_vector(Iterator, Iterator); + static_vector(std::initializer_list< value_type >); + static_vector(static_vector const &); + static_vector(static_vector const &, const allocator_type &); + static_vector(static_vector &&, const allocator_type &) noexcept(boost::container::container_detail::is_nothrow_move_constructible< value_type >::value)); + explicit static_vector(const allocator_type &); template<std::size_t C> - static_vector(static_vector< value_type, C > const &); - static_vector(static_vector &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< value_type >::value)); - template<std::size_t C> static_vector(static_vector< value_type, C > &&); - static_vector & operator=(const static_vector &); - static_vector & operator=(std::initializer_list< value_type >); + static_vector(static_vector< value_type, C > const &); + static_vector(static_vector &&) noexcept(boost::container::container_detail::is_nothrow_move_constructible< value_type >::value)); + template<std::size_t C> static_vector(static_vector< value_type, C > &&); + static_vector & operator=(const static_vector &); + static_vector & operator=(std::initializer_list< value_type >); template<std::size_t C> - static_vector & operator=(static_vector< value_type, C > const &); - static_vector & operator=(static_vector &&); + static_vector & operator=(static_vector< value_type, C > const &); + static_vector & operator=(static_vector &&); template<std::size_t C> - static_vector & operator=(static_vector< value_type, C > &&); - ~static_vector(); + static_vector & operator=(static_vector< value_type, C > &&); + ~static_vector(); - // public member functions - void swap(static_vector &); - template<std::size_t C> void swap(static_vector< value_type, C > &); - void resize(size_type); - void resize(size_type, default_init_t); - void resize(size_type, value_type const &); - void reserve(size_type) noexcept; - void push_back(value_type const &); - void push_back(value_type &&); - void pop_back(); - iterator insert(const_iterator, value_type const &); - iterator insert(const_iterator, value_type &&); - iterator insert(const_iterator, size_type, value_type const &); + // public member functions + void swap(static_vector &); + template<std::size_t C> void swap(static_vector< value_type, C > &); + void resize(size_type); + void resize(size_type, default_init_t); + void resize(size_type, value_type const &); + void reserve(size_type) noexcept; + void push_back(value_type const &); + void push_back(value_type &&); + void pop_back(); + iterator insert(const_iterator, value_type const &); + iterator insert(const_iterator, value_type &&); + iterator insert(const_iterator, size_type, value_type const &); template<typename Iterator> - iterator insert(const_iterator, Iterator, Iterator); - iterator insert(const_iterator, std::initializer_list< value_type >); - iterator erase(const_iterator); - iterator erase(const_iterator, const_iterator); - template<typename Iterator> void assign(Iterator, Iterator); - void assign(std::initializer_list< value_type >); - void assign(size_type, value_type const &); - template<class... Args> reference emplace_back(Args &&...); - template<class... Args> iterator emplace(const_iterator, Args &&...); - void clear() noexcept; - reference at(size_type); - const_reference at(size_type) const; - reference operator[](size_type); - const_reference operator[](size_type) const; - iterator nth(size_type); - const_iterator nth(size_type) const; - size_type index_of(iterator); - size_type index_of(const_iterator) const; - reference front(); - const_reference front() const; - reference back(); - const_reference back() const; - Value * data() noexcept; - const Value * data() const noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - const_iterator cbegin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - const_iterator cend() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - const_reverse_iterator crbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_reverse_iterator crend() const noexcept; - size_type size() const noexcept; - bool empty() const noexcept; + iterator insert(const_iterator, Iterator, Iterator); + iterator insert(const_iterator, std::initializer_list< value_type >); + iterator erase(const_iterator); + iterator erase(const_iterator, const_iterator); + template<typename Iterator> void assign(Iterator, Iterator); + void assign(std::initializer_list< value_type >); + void assign(size_type, value_type const &); + template<class... Args> reference emplace_back(Args &&...); + template<class... Args> iterator emplace(const_iterator, Args &&...); + void clear() noexcept; + reference at(size_type); + const_reference at(size_type) const; + reference operator[](size_type); + const_reference operator[](size_type) const; + iterator nth(size_type); + const_iterator nth(size_type) const; + size_type index_of(iterator); + size_type index_of(const_iterator) const; + reference front(); + const_reference front() const; + reference back(); + const_reference back() const; + Value * data() noexcept; + const Value * data() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + const_iterator cbegin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator crbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_reverse_iterator crend() const noexcept; + size_type size() const noexcept; + bool empty() const noexcept; - // public static functions - static size_type capacity() noexcept; - static size_type max_size() noexcept; + // public static functions + static size_type capacity() noexcept; + static size_type max_size() noexcept; // public data members static const size_type static_capacity; // The capacity/max size of the container. };
      -

      Description

      +

      Description

      static_vector is a sequence container like boost::container::vector with contiguous storage that can change in size, along with the static allocation, low overhead, and fixed capacity of boost::array.

      A static_vector is a sequence that supports random access to elements, constant time insertion and removal of elements at the end, and linear time insertion and removal of elements at the beginning or in the middle. The number of elements in a static_vector may vary dynamically up to a fixed capacity because elements are stored within the object itself similarly to an array. However, objects are initialized as they are inserted into static_vector unlike C arrays or std::array which must construct all elements on instantiation. The behavior of static_vector enables the use of statically allocated elements in cases with complex object lifetime requirements that would otherwise not be trivially possible.

      Error Handling. Insertion beyond the capacity result in throwing std::bad_alloc() if exceptions are enabled or calling throw_bad_alloc() if not enabled.

      @@ -139,7 +142,7 @@ std::out_of_range is thrown if out of bound access is performed in -

      Template Parameters

      +

      Template Parameters

      1. typename Value
        @@ -152,13 +155,13 @@ std::out_of_range is thrown if out of bound access is performed in -

        +

        static_vector public construct/copy/destruct

        1. -
          static_vector() noexcept;
          Constructs an empty static_vector.

          Throws. Nothing.

          +
          static_vector() noexcept;
          Constructs an empty static_vector.

          Throws. Nothing.

          Complexity. Constant O(1).

          @@ -166,7 +169,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          explicit static_vector(size_type count);
          Constructs a static_vector containing count value initialized values.

          +

          explicit static_vector(size_type count);
          Constructs a static_vector containing count value initialized values.

          Throws. If Value's value initialization throws.

          @@ -202,7 +205,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          static_vector(size_type count, default_init_t);
          Constructs a static_vector containing count default initialized values.

          +

          static_vector(size_type count, default_init_t);
          Constructs a static_vector containing count default initialized values.

          Throws. If Value's default initialization throws.

          @@ -241,7 +244,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          static_vector(size_type count, value_type const & value);
          Constructs a static_vector containing count copies of value.

          +

          static_vector(size_type count, value_type const & value);
          Constructs a static_vector containing count copies of value.

          Throws. If Value's copy constructor throws.

          @@ -283,7 +286,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          template<typename Iterator> static_vector(Iterator first, Iterator last);
          Constructs a static_vector containing copy of a range [first, last).

          +

          template<typename Iterator> static_vector(Iterator first, Iterator last);
          Constructs a static_vector containing copy of a range [first, last).

          Throws. If Value's constructor taking a dereferenced Iterator throws.

          @@ -332,7 +335,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          static_vector(std::initializer_list< value_type > il);
          Constructs a static_vector containing copy of a range [il.begin(), il.end()).

          +

          static_vector(std::initializer_list< value_type > il);
          Constructs a static_vector containing copy of a range [il.begin(), il.end()).

          Throws. If Value's constructor taking a dereferenced std::initializer_list throws.

          @@ -372,7 +375,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          static_vector(static_vector const & other);
          Constructs a copy of other static_vector.

          +

          static_vector(static_vector const & other);
          Constructs a copy of other static_vector.

          Throws. If Value's copy constructor throws.

          @@ -400,9 +403,12 @@ std::out_of_range is thrown if out of bound access is performed in

          static_vector(static_vector const & other, const allocator_type &);
        2. +
        3. static_vector(static_vector && other, const allocator_type &) noexcept(boost::container::container_detail::is_nothrow_move_constructible< value_type >::value));
        4. +
        5. explicit static_vector(const allocator_type &);
        6. template<std::size_t C> 
          -  static_vector(static_vector< value_type, C > const & other);
          Constructs a copy of other static_vector.

          + static_vector(static_vector< value_type, C > const & other);Constructs a copy of other static_vector.

          Throws. If Value's copy constructor throws.

          @@ -438,7 +444,7 @@ std::out_of_range is thrown if out of bound access is performed in -
          static_vector(static_vector && other) noexcept(boost::container::container_detail::is_nothrow_move_constructible< value_type >::value));
          Move constructor. Moves Values stored in the other static_vector to this one.

          +

          static_vector(static_vector && other) noexcept(boost::container::container_detail::is_nothrow_move_constructible< value_type >::value));
          Move constructor. Moves Values stored in the other static_vector to this one.

          Throws. 

            @@ -473,7 +479,7 @@ std::out_of_range is thrown if out of bound access is performed in -
            template<std::size_t C> static_vector(static_vector< value_type, C > && other);
            Move constructor. Moves Values stored in the other static_vector to this one.

            +

            template<std::size_t C> static_vector(static_vector< value_type, C > && other);
            Move constructor. Moves Values stored in the other static_vector to this one.

            Throws. 

            @@ -515,7 +521,7 @@ std::out_of_range is thrown if out of bound access is performed in -
            static_vector & operator=(const static_vector & other);
            Copy assigns Values stored in the other static_vector to this one.

            +

            static_vector & operator=(const static_vector & other);
            Copy assigns Values stored in the other static_vector to this one.

            Throws. If Value's copy constructor or copy assignment throws.

            @@ -544,7 +550,7 @@ std::out_of_range is thrown if out of bound access is performed in -

            static_vector & operator=(std::initializer_list< value_type > il);
            Copy assigns Values stored in std::initializer_list to *this.

            +

            static_vector & operator=(std::initializer_list< value_type > il);
            Copy assigns Values stored in std::initializer_list to *this.

            Throws. If Value's copy constructor or copy assignment throws.

            @@ -574,7 +580,7 @@ std::out_of_range is thrown if out of bound access is performed in

            template<std::size_t C> 
            -  static_vector & operator=(static_vector< value_type, C > const & other);
            Copy assigns Values stored in the other static_vector to this one.

            + static_vector & operator=(static_vector< value_type, C > const & other);Copy assigns Values stored in the other static_vector to this one.

            Throws. If Value's copy constructor or copy assignment throws.

            @@ -610,7 +616,7 @@ std::out_of_range is thrown if out of bound access is performed in -
            static_vector & operator=(static_vector && other);
            Move assignment. Moves Values stored in the other static_vector to this one.

            +

            static_vector & operator=(static_vector && other);
            Move assignment. Moves Values stored in the other static_vector to this one.

            Throws. 

              @@ -646,7 +652,7 @@ std::out_of_range is thrown if out of bound access is performed in
              template<std::size_t C> 
              -  static_vector & operator=(static_vector< value_type, C > && other);
              Move assignment. Moves Values stored in the other static_vector to this one.

              + static_vector & operator=(static_vector< value_type, C > && other);Move assignment. Moves Values stored in the other static_vector to this one.

              Throws. 

              @@ -688,7 +694,7 @@ std::out_of_range is thrown if out of bound access is performed in -
              ~static_vector();
              Destructor. Destroys Values stored in this container.

              Throws. Nothing

              +
              ~static_vector();
              Destructor. Destroys Values stored in this container.

              Throws. Nothing

              Complexity. Linear O(N).

              @@ -698,11 +704,11 @@ std::out_of_range is thrown if out of bound access is performed in -

              -static_vector public member functions

              +

              +static_vector public member functions

              1. -
                void swap(static_vector & other);
                Swaps contents of the other static_vector and this one.

                +

                void swap(static_vector & other);
                Swaps contents of the other static_vector and this one.

                Throws. 

                  @@ -737,7 +743,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  template<std::size_t C> void swap(static_vector< value_type, C > & other);
                  Swaps contents of the other static_vector and this one.

                  +

                  template<std::size_t C> void swap(static_vector< value_type, C > & other);
                  Swaps contents of the other static_vector and this one.

                  Throws. 

                  @@ -779,7 +785,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void resize(size_type count);
                  Inserts or erases elements at the end such that the size becomes count. New elements are value initialized.

                  +

                  void resize(size_type count);
                  Inserts or erases elements at the end such that the size becomes count. New elements are value initialized.

                  Throws. If Value's value initialization throws.

                  @@ -815,7 +821,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void resize(size_type count, default_init_t);
                  Inserts or erases elements at the end such that the size becomes count. New elements are default initialized.

                  +

                  void resize(size_type count, default_init_t);
                  Inserts or erases elements at the end such that the size becomes count. New elements are default initialized.

                  Throws. If Value's default initialization throws.

                  @@ -854,7 +860,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void resize(size_type count, value_type const & value);
                  Inserts or erases elements at the end such that the size becomes count. New elements are copy constructed from value.

                  +

                  void resize(size_type count, value_type const & value);
                  Inserts or erases elements at the end such that the size becomes count. New elements are copy constructed from value.

                  Throws. If Value's copy constructor throws.

                  @@ -896,7 +902,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void reserve(size_type count) noexcept;
                  This call has no effect because the Capacity of this container is constant.

                  +

                  void reserve(size_type count) noexcept;
                  This call has no effect because the Capacity of this container is constant.

                  Throws. Nothing.

                  @@ -932,7 +938,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void push_back(value_type const & value);
                  Adds a copy of value at the end.

                  +

                  void push_back(value_type const & value);
                  Adds a copy of value at the end.

                  Throws. If Value's copy constructor throws.

                  @@ -968,7 +974,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void push_back(value_type && value);
                  Moves value to the end.

                  +

                  void push_back(value_type && value);
                  Moves value to the end.

                  Throws. If Value's move constructor throws.

                  @@ -1004,7 +1010,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void pop_back();
                  Destroys last value and decreases the size.

                  +

                  void pop_back();
                  Destroys last value and decreases the size.

                  Throws. Nothing by default.

                  @@ -1024,7 +1030,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  iterator insert(const_iterator p, value_type const & value);
                  Inserts a copy of element at p.

                  +

                  iterator insert(const_iterator p, value_type const & value);
                  Inserts a copy of element at p.

                  Throws. 

                  @@ -1079,7 +1085,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator insert(const_iterator p, value_type && value);
                  Inserts a move-constructed element at p.

                  +

                  iterator insert(const_iterator p, value_type && value);
                  Inserts a move-constructed element at p.

                  Throws. If Value's move constructor or move assignment throws.

                  @@ -1128,7 +1134,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator insert(const_iterator p, size_type count, value_type const & value);
                  Inserts a count copies of value at p.

                  +

                  iterator insert(const_iterator p, size_type count, value_type const & value);
                  Inserts a count copies of value at p.

                  Throws. 

                  @@ -1188,7 +1194,7 @@ std::out_of_range is thrown if out of bound access is performed in
                  template<typename Iterator> 
                  -  iterator insert(const_iterator p, Iterator first, Iterator last);
                  Inserts a copy of a range [first, last) at p.

                  + iterator insert(const_iterator p, Iterator first, Iterator last);Inserts a copy of a range [first, last) at p.

                  Throws. 

                  @@ -1248,7 +1254,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator insert(const_iterator p, std::initializer_list< value_type > il);
                  Inserts a copy of a range [il.begin(), il.end()) at p.

                  +

                  iterator insert(const_iterator p, std::initializer_list< value_type > il);
                  Inserts a copy of a range [il.begin(), il.end()) at p.

                  Throws. 

                  @@ -1300,7 +1306,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator erase(const_iterator p);
                  Erases Value from p.

                  +

                  iterator erase(const_iterator p);
                  Erases Value from p.

                  Throws. If Value's move assignment throws.

                  @@ -1336,7 +1342,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator erase(const_iterator first, const_iterator last);
                  Erases Values from a range [first, last).

                  +

                  iterator erase(const_iterator first, const_iterator last);
                  Erases Values from a range [first, last).

                  Throws. If Value's move assignment throws.

                  @@ -1385,7 +1391,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  template<typename Iterator> void assign(Iterator first, Iterator last);
                  Assigns a range [first, last) of Values to this container.

                  +

                  template<typename Iterator> void assign(Iterator first, Iterator last);
                  Assigns a range [first, last) of Values to this container.

                  Throws. If Value's copy constructor or copy assignment throws,

                  @@ -1427,7 +1433,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void assign(std::initializer_list< value_type > il);
                  Assigns a range [il.begin(), il.end()) of Values to this container.

                  +

                  void assign(std::initializer_list< value_type > il);
                  Assigns a range [il.begin(), il.end()) of Values to this container.

                  Throws. If Value's copy constructor or copy assignment throws,

                  @@ -1463,7 +1469,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void assign(size_type count, value_type const & value);
                  Assigns a count copies of value to this container.

                  +

                  void assign(size_type count, value_type const & value);
                  Assigns a count copies of value to this container.

                  Throws. If Value's copy constructor or copy assignment throws.

                  @@ -1505,7 +1511,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  template<class... Args> reference emplace_back(Args &&... args);
                  Inserts a Value constructed with std::forward<Args>(args)... in the end of the container.

                  +

                  template<class... Args> reference emplace_back(Args &&... args);
                  Inserts a Value constructed with std::forward<Args>(args)... in the end of the container.

                  @@ -1546,7 +1552,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  template<class... Args> iterator emplace(const_iterator p, Args &&... args);
                  Inserts a Value constructed with std::forward<Args>(args)... before p.

                  +

                  template<class... Args> iterator emplace(const_iterator p, Args &&... args);
                  Inserts a Value constructed with std::forward<Args>(args)... before p.

                  Throws. If in-place constructor throws or if Value's move constructor or move assignment throws.

                  @@ -1595,7 +1601,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  void clear() noexcept;
                  Removes all elements from the container.

                  Throws. Nothing.

                  +
                  void clear() noexcept;
                  Removes all elements from the container.

                  Throws. Nothing.

                  Complexity. Constant O(1).

                  @@ -1603,7 +1609,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  reference at(size_type i);
                  Returns reference to the i-th element.

                  +

                  reference at(size_type i);
                  Returns reference to the i-th element.

                  @@ -1644,7 +1650,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  const_reference at(size_type i) const;
                  Returns const reference to the i-th element.

                  +

                  const_reference at(size_type i) const;
                  Returns const reference to the i-th element.

                  @@ -1685,7 +1691,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  reference operator[](size_type i);
                  Returns reference to the i-th element.

                  +

                  reference operator[](size_type i);
                  Returns reference to the i-th element.

                  @@ -1726,7 +1732,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  const_reference operator[](size_type i) const;
                  Returns const reference to the i-th element.

                  +

                  const_reference operator[](size_type i) const;
                  Returns const reference to the i-th element.

                  @@ -1767,7 +1773,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator nth(size_type i);
                  Returns a iterator to the i-th element.

                  +

                  iterator nth(size_type i);
                  Returns a iterator to the i-th element.

                  @@ -1808,7 +1814,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  const_iterator nth(size_type i) const;
                  Returns a const_iterator to the i-th element.

                  +

                  const_iterator nth(size_type i) const;
                  Returns a const_iterator to the i-th element.

                  @@ -1849,7 +1855,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  size_type index_of(iterator p);
                  Returns the index of the element pointed by p.

                  +

                  size_type index_of(iterator p);
                  Returns the index of the element pointed by p.

                  @@ -1890,7 +1896,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  size_type index_of(const_iterator p) const;
                  Returns the index of the element pointed by p.

                  +

                  size_type index_of(const_iterator p) const;
                  Returns the index of the element pointed by p.

                  @@ -1931,7 +1937,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  reference front();
                  Returns reference to the first element.

                  +

                  reference front();
                  Returns reference to the first element.

                  Throws. Nothing by default.

                  @@ -1958,7 +1964,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  const_reference front() const;
                  Returns const reference to the first element.

                  +

                  const_reference front() const;
                  Returns const reference to the first element.

                  Throws. Nothing by default.

                  @@ -1985,7 +1991,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  reference back();
                  Returns reference to the last element.

                  +

                  reference back();
                  Returns reference to the last element.

                  Throws. Nothing by default.

                  @@ -2012,7 +2018,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  const_reference back() const;
                  Returns const reference to the first element.

                  +

                  const_reference back() const;
                  Returns const reference to the first element.

                  Throws. Nothing by default.

                  @@ -2039,7 +2045,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  Value * data() noexcept;
                  Pointer such that [data(), data() + size()) is a valid range. For a non-empty vector data() == &front().

                  Throws. Nothing.

                  +
                  Value * data() noexcept;
                  Pointer such that [data(), data() + size()) is a valid range. For a non-empty vector data() == &front().

                  Throws. Nothing.

                  Complexity. Constant O(1).

                  @@ -2047,7 +2053,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  const Value * data() const noexcept;
                  Const pointer such that [data(), data() + size()) is a valid range. For a non-empty vector data() == &front().

                  Throws. Nothing.

                  +
                  const Value * data() const noexcept;
                  Const pointer such that [data(), data() + size()) is a valid range. For a non-empty vector data() == &front().

                  Throws. Nothing.

                  Complexity. Constant O(1).

                  @@ -2055,7 +2061,7 @@ std::out_of_range is thrown if out of bound access is performed in -
                  iterator begin() noexcept;
                  Returns iterator to the first element.

                  +

                  iterator begin() noexcept;
                  Returns iterator to the first element.

                  Throws. Nothing.

                  @@ -2075,7 +2081,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_iterator begin() const noexcept;
                  Returns const iterator to the first element.

                  +

                  const_iterator begin() const noexcept;
                  Returns const iterator to the first element.

                  Throws. Nothing.

                  @@ -2095,7 +2101,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_iterator cbegin() const noexcept;
                  Returns const iterator to the first element.

                  +

                  const_iterator cbegin() const noexcept;
                  Returns const iterator to the first element.

                  Throws. Nothing.

                  @@ -2115,7 +2121,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  iterator end() noexcept;
                  Returns iterator to the one after the last element.

                  +

                  iterator end() noexcept;
                  Returns iterator to the one after the last element.

                  Throws. Nothing.

                  @@ -2135,7 +2141,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_iterator end() const noexcept;
                  Returns const iterator to the one after the last element.

                  +

                  const_iterator end() const noexcept;
                  Returns const iterator to the one after the last element.

                  Throws. Nothing.

                  @@ -2155,7 +2161,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_iterator cend() const noexcept;
                  Returns const iterator to the one after the last element.

                  +

                  const_iterator cend() const noexcept;
                  Returns const iterator to the one after the last element.

                  Throws. Nothing.

                  @@ -2175,7 +2181,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  reverse_iterator rbegin() noexcept;
                  Returns reverse iterator to the first element of the reversed container.

                  +

                  reverse_iterator rbegin() noexcept;
                  Returns reverse iterator to the first element of the reversed container.

                  Throws. Nothing.

                  @@ -2195,7 +2201,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_reverse_iterator rbegin() const noexcept;
                  Returns const reverse iterator to the first element of the reversed container.

                  +

                  const_reverse_iterator rbegin() const noexcept;
                  Returns const reverse iterator to the first element of the reversed container.

                  Throws. Nothing.

                  @@ -2215,7 +2221,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_reverse_iterator crbegin() const noexcept;
                  Returns const reverse iterator to the first element of the reversed container.

                  +

                  const_reverse_iterator crbegin() const noexcept;
                  Returns const reverse iterator to the first element of the reversed container.

                  Throws. Nothing.

                  @@ -2235,7 +2241,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  reverse_iterator rend() noexcept;
                  Returns reverse iterator to the one after the last element of the reversed container.

                  +

                  reverse_iterator rend() noexcept;
                  Returns reverse iterator to the one after the last element of the reversed container.

                  Throws. Nothing.

                  @@ -2255,7 +2261,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_reverse_iterator rend() const noexcept;
                  Returns const reverse iterator to the one after the last element of the reversed container.

                  +

                  const_reverse_iterator rend() const noexcept;
                  Returns const reverse iterator to the one after the last element of the reversed container.

                  Throws. Nothing.

                  @@ -2275,7 +2281,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  const_reverse_iterator crend() const noexcept;
                  Returns const reverse iterator to the one after the last element of the reversed container.

                  +

                  const_reverse_iterator crend() const noexcept;
                  Returns const reverse iterator to the one after the last element of the reversed container.

                  Throws. Nothing.

                  @@ -2295,7 +2301,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  size_type size() const noexcept;
                  Returns the number of stored elements.

                  +

                  size_type size() const noexcept;
                  Returns the number of stored elements.

                  Throws. Nothing.

                  @@ -2315,7 +2321,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                  bool empty() const noexcept;
                  Queries if the container contains elements.

                  +

                  bool empty() const noexcept;
                  Queries if the container contains elements.

                  Throws. Nothing.

                  @@ -2337,11 +2343,11 @@ std::out_of_range is thrown if out of bound access is performed in -

                  -static_vector public static functions

                  +

                  +static_vector public static functions

                  1. -
                    static size_type capacity() noexcept;
                    Returns container's capacity.

                    +

                    static size_type capacity() noexcept;
                    Returns container's capacity.

                    Throws. Nothing.

                    @@ -2361,7 +2367,7 @@ std::out_of_range is thrown if out of bound access is performed in -

                    static size_type max_size() noexcept;
                    Returns container's capacity.

                    +

                    static size_type max_size() noexcept;
                    Returns container's capacity.

                    Throws. Nothing.

                    @@ -2394,7 +2400,7 @@ std::out_of_range is thrown if out of bound access is performed in -PrevUpHomeNext +PrevUpHomeNext

                  diff --git a/doc/html/boost/container/string.html b/doc/html/boost/container/string.html index d793755ad3..8de77f06a0 100644 --- a/doc/html/boost/container/string.html +++ b/doc/html/boost/container/string.html @@ -35,7 +35,7 @@ typedef basic_string< char,std::char_traits< char >,new_allocator< char > > string;
                -

                Description

                +

                Description

                Typedef for a basic_string of narrow characters

              diff --git a/doc/html/boost/container/swap_idp44997552.html b/doc/html/boost/container/swap_idp44997552.html deleted file mode 100644 index 2180658a48..0000000000 --- a/doc/html/boost/container/swap_idp44997552.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - -Function template swap - - - - - - - - - - - - - - - -
              Boost C++ LibrariesHomeLibrariesPeopleFAQMore
              -
              -
              -PrevUpHomeNext -
              -
              -
              -
              -

              Function template swap

              -

              boost::container::swap — Swaps contents of two static_vectors.

              -
              -

              Synopsis

              -
              // In header: <boost/container/static_vector.hpp>
              -
              -
              -template<typename V, std::size_t C1, std::size_t C2> 
              -  void swap(static_vector< V, C1 > & x, static_vector< V, C2 > & y);
              -
              -

              Description

              -

              This function calls static_vector::swap().

              -

              -

              -

              Complexity. Linear O(N).

              -

              -

              -
              ---- - - - - -

              Parameters:

              ---- - - - - - - - - - - -

              x

              The first static_vector.

              y

              The second static_vector.

              -
              -
              - - - -
              -
              -
              -PrevUpHomeNext -
              - - diff --git a/doc/html/boost/container/swap_idp66348864.html b/doc/html/boost/container/swap_idp66348864.html new file mode 100644 index 0000000000..c9ef051806 --- /dev/null +++ b/doc/html/boost/container/swap_idp66348864.html @@ -0,0 +1,86 @@ + + + + +Function template swap + + + + + + + + + + + + + + + +
              Boost C++ LibrariesHomeLibrariesPeopleFAQMore
              +
              +
              +PrevUpHomeNext +
              +
              +
              +
              +

              Function template swap

              +

              boost::container::swap — Swaps contents of two static_vectors.

              +
              +

              Synopsis

              +
              // In header: <boost/container/static_vector.hpp>
              +
              +
              +template<typename V, std::size_t C1, std::size_t C2> 
              +  void swap(static_vector< V, C1 > & x, static_vector< V, C2 > & y);
              +
              +

              Description

              +

              This function calls static_vector::swap().

              +

              +

              +

              Complexity. Linear O(N).

              +

              +

              +
              ++++ + + + + +

              Parameters:

              ++++ + + + + + + + + + + +

              x

              The first static_vector.

              y

              The second static_vector.

              +
              +
              + + + +
              +
              +
              +PrevUpHomeNext +
              + + diff --git a/doc/html/boost/container/throw_bad_alloc.html b/doc/html/boost/container/throw_bad_alloc.html index d6f5e9a505..7c46ee352d 100644 --- a/doc/html/boost/container/throw_bad_alloc.html +++ b/doc/html/boost/container/throw_bad_alloc.html @@ -35,7 +35,7 @@ void throw_bad_alloc();
            -

            Description

            +

            Description

            Exception callback called by Boost.Container when fails to allocate the requested storage space.

            • diff --git a/doc/html/boost/container/throw_length_error.html b/doc/html/boost/container/throw_length_error.html index da78ff5c79..20e2ce7b26 100644 --- a/doc/html/boost/container/throw_length_error.html +++ b/doc/html/boost/container/throw_length_error.html @@ -35,7 +35,7 @@ void throw_length_error(const char * str);
            -

            Description

            +

            Description

            Exception callback called by Boost.Container to signal errors resizing.

            • diff --git a/doc/html/boost/container/throw_logic_error.html b/doc/html/boost/container/throw_logic_error.html index 354be48506..eff9f33154 100644 --- a/doc/html/boost/container/throw_logic_error.html +++ b/doc/html/boost/container/throw_logic_error.html @@ -35,7 +35,7 @@ void throw_logic_error(const char * str);
            -

            Description

            +

            Description

            Exception callback called by Boost.Container to report errors in the internal logical of the program, such as violation of logical preconditions or class invariants.

            • diff --git a/doc/html/boost/container/throw_out_of_range.html b/doc/html/boost/container/throw_out_of_range.html index 732afe821b..3434da327a 100644 --- a/doc/html/boost/container/throw_out_of_range.html +++ b/doc/html/boost/container/throw_out_of_range.html @@ -35,7 +35,7 @@ void throw_out_of_range(const char * str);
            -

            Description

            +

            Description

            Exception callback called by Boost.Container to signal arguments out of range.

            • diff --git a/doc/html/boost/container/throw_runtime_error.html b/doc/html/boost/container/throw_runtime_error.html index 09a752fc7b..6197eea5db 100644 --- a/doc/html/boost/container/throw_runtime_error.html +++ b/doc/html/boost/container/throw_runtime_error.html @@ -8,7 +8,7 @@ - + @@ -21,7 +21,7 @@

              -PrevUpHomeNext +PrevUpHomeNext
              @@ -35,7 +35,7 @@ void throw_runtime_error(const char * str);
              -

              Description

              +

              Description

              Exception callback called by Boost.Container to report errors that can only be detected during runtime.

              • @@ -62,7 +62,7 @@
                -PrevUpHomeNext +PrevUpHomeNext
                diff --git a/doc/html/boost/container/tree_assoc_defaults.html b/doc/html/boost/container/tree_assoc_defaults.html index 28019ccfcc..1830d471f7 100644 --- a/doc/html/boost/container/tree_assoc_defaults.html +++ b/doc/html/boost/container/tree_assoc_defaults.html @@ -35,7 +35,7 @@ typedef implementation_defined tree_assoc_defaults;
              -

              Description

              +

              Description

              Default options for tree-based associative containers

              • tree_type<red_black_tree>

              • diff --git a/doc/html/boost/container/tree_assoc_options.html b/doc/html/boost/container/tree_assoc_options.html index 1db968ad7d..2c76223980 100644 --- a/doc/html/boost/container/tree_assoc_options.html +++ b/doc/html/boost/container/tree_assoc_options.html @@ -38,7 +38,7 @@ typedef implementation_defined type; };
              -

              Description

              +

              Description

              Helper metafunction to combine options into a single type to be used by boost::container::set, boost::container::multiset boost::container::map and boost::container::multimap. Supported options are: boost::container::optimize_size and boost::container::tree_type

              diff --git a/doc/html/boost/container/tree_type.html b/doc/html/boost/container/tree_type.html index 20f45a79e5..371c2aa7f9 100644 --- a/doc/html/boost/container/tree_type.html +++ b/doc/html/boost/container/tree_type.html @@ -36,7 +36,7 @@ struct tree_type { };
              -

              Description

              +

              Description

              This option setter specifies the underlying tree type (red-black, AVL, Scapegoat or Splay) for ordered associative containers

            diff --git a/doc/html/boost/container/tree_type_enum.html b/doc/html/boost/container/tree_type_enum.html index c0f2d97e50..e96ec4b76c 100644 --- a/doc/html/boost/container/tree_type_enum.html +++ b/doc/html/boost/container/tree_type_enum.html @@ -36,7 +36,7 @@ enum tree_type_enum { red_black_tree, avl_tree, scapegoat_tree, splay_tree };
            -

            Description

            +

            Description

            Enumeration used to configure ordered associative containers with a concrete tree implementation.

            diff --git a/doc/html/boost/container/uses_allocator.html b/doc/html/boost/container/uses_allocator.html index 7180d90057..94ba5e7f10 100644 --- a/doc/html/boost/container/uses_allocator.html +++ b/doc/html/boost/container/uses_allocator.html @@ -7,7 +7,7 @@ - + @@ -21,7 +21,7 @@
            -PrevUpHomeNext +PrevUpHomeNext
            @@ -36,7 +36,7 @@ struct uses_allocator { };
            -

            Description

            +

            Description

            Remark: Automatically detects whether T has a nested allocator_type that is convertible from Allocator. Meets the BinaryTypeTrait requirements ([meta.rqmts] 20.4.1). A program may specialize this type to define uses_allocator<X>::value as true for a T of user-defined type if T does not have a nested allocator_type but is nonetheless constructible using the specified Allocator where either: the first argument of a constructor has type allocator_arg_t and the second argument has type Alloc or the last argument of a constructor has type Alloc.

            Result: uses_allocator<T, Allocator>::value== true if a type T::allocator_type exists and either is_convertible<Alloc, T::allocator_type>::value != false or T::allocator_type is an alias erased_type. False otherwise.

            @@ -51,7 +51,7 @@
            -PrevUpHomeNext +PrevUpHomeNext
            diff --git a/doc/html/boost/container/vector.html b/doc/html/boost/container/vector.html index e357c16c83..332dc7b71b 100644 --- a/doc/html/boost/container/vector.html +++ b/doc/html/boost/container/vector.html @@ -51,102 +51,102 @@ typedef implementation_defined const_reverse_iterator; // construct/copy/destruct - vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); - explicit vector(const allocator_type &) noexcept; - explicit vector(size_type); - explicit vector(size_type, const allocator_type &); - vector(size_type, default_init_t); - vector(size_type, default_init_t, const allocator_type &); - vector(size_type, const T &); - vector(size_type, const T &, const allocator_type &); - template<typename InIt> vector(InIt, InIt last ); - template<typename InIt> vector(InIt, InIt, const allocator_type &a ); - vector(const vector &); - vector(vector &&) noexcept; - vector(std::initializer_list< value_type >, + vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value)); + explicit vector(const allocator_type &) noexcept; + explicit vector(size_type); + explicit vector(size_type, const allocator_type &); + vector(size_type, default_init_t); + vector(size_type, default_init_t, const allocator_type &); + vector(size_type, const T &); + vector(size_type, const T &, const allocator_type &); + template<typename InIt> vector(InIt, InIt last ); + template<typename InIt> vector(InIt, InIt, const allocator_type &a ); + vector(const vector &); + vector(vector &&) noexcept; + vector(std::initializer_list< value_type >, const allocator_type & = allocator_type()); - vector(const vector &, const allocator_type &); - vector(vector &&, const allocator_type &); - vector & operator=(const vector &); - vector & operator=(std::initializer_list< value_type >); - vector & operator=(vector &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); - ~vector(); + vector(const vector &, const allocator_type &); + vector(vector &&, const allocator_type &); + vector & operator=(const vector &); + vector & operator=(std::initializer_list< value_type >); + vector & operator=(vector &&) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value)); + ~vector(); - // public member functions - template<typename InIt> void assign(InIt, InIt last ); - void assign(std::initializer_list< T >); - template<typename FwdIt> void assign(FwdIt, FwdIt last ); - void assign(size_type, const value_type &); - allocator_type get_allocator() const noexcept; - stored_allocator_type & get_stored_allocator() noexcept; - const stored_allocator_type & get_stored_allocator() const noexcept; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; - reverse_iterator rbegin() noexcept; - const_reverse_iterator rbegin() const noexcept; - reverse_iterator rend() noexcept; - const_reverse_iterator rend() const noexcept; - const_iterator cbegin() const noexcept; - const_iterator cend() const noexcept; - const_reverse_iterator crbegin() const noexcept; - const_reverse_iterator crend() const noexcept; - bool empty() const noexcept; - size_type size() const noexcept; - size_type max_size() const noexcept; - void resize(size_type); - void resize(size_type, default_init_t); - void resize(size_type, const T &); - size_type capacity() const noexcept; - void reserve(size_type); - void shrink_to_fit(); - reference front() noexcept; - const_reference front() const noexcept; - reference back() noexcept; - const_reference back() const noexcept; - reference operator[](size_type) noexcept; - const_reference operator[](size_type) const noexcept; - iterator nth(size_type) noexcept; - const_iterator nth(size_type) const noexcept; - size_type index_of(iterator) noexcept; - size_type index_of(const_iterator) const noexcept; - reference at(size_type); - const_reference at(size_type) const; - T * data() noexcept; - const T * data() const noexcept; - template<class... Args> reference emplace_back(Args &&...); - template<class... Args> bool stable_emplace_back(Args &&...); - template<class... Args> iterator emplace(const_iterator, Args &&...); - void push_back(const T &); - void push_back(T &&); - iterator insert(const_iterator, const T &); - iterator insert(const_iterator, T &&); - iterator insert(const_iterator, size_type, const T &); - template<typename InIt> iterator insert(const_iterator, InIt, InIt); - iterator insert(const_iterator, std::initializer_list< value_type >); - void pop_back() noexcept; - iterator erase(const_iterator); - iterator erase(const_iterator, const_iterator); - void swap(vector &) noexcept(((allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)&&!container_detail::is_version< Allocator, 0 >::value))); - void clear() noexcept; + // public member functions + template<typename InIt> void assign(InIt, InIt last ); + void assign(std::initializer_list< T >); + template<typename FwdIt> void assign(FwdIt, FwdIt last ); + void assign(size_type, const value_type &); + allocator_type get_allocator() const noexcept; + stored_allocator_type & get_stored_allocator() noexcept; + const stored_allocator_type & get_stored_allocator() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + reverse_iterator rbegin() noexcept; + const_reverse_iterator rbegin() const noexcept; + reverse_iterator rend() noexcept; + const_reverse_iterator rend() const noexcept; + const_iterator cbegin() const noexcept; + const_iterator cend() const noexcept; + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + bool empty() const noexcept; + size_type size() const noexcept; + size_type max_size() const noexcept; + void resize(size_type); + void resize(size_type, default_init_t); + void resize(size_type, const T &); + size_type capacity() const noexcept; + void reserve(size_type); + void shrink_to_fit(); + reference front() noexcept; + const_reference front() const noexcept; + reference back() noexcept; + const_reference back() const noexcept; + reference operator[](size_type) noexcept; + const_reference operator[](size_type) const noexcept; + iterator nth(size_type) noexcept; + const_iterator nth(size_type) const noexcept; + size_type index_of(iterator) noexcept; + size_type index_of(const_iterator) const noexcept; + reference at(size_type); + const_reference at(size_type) const; + T * data() noexcept; + const T * data() const noexcept; + template<class... Args> reference emplace_back(Args &&...); + template<class... Args> bool stable_emplace_back(Args &&...); + template<class... Args> iterator emplace(const_iterator, Args &&...); + void push_back(const T &); + void push_back(T &&); + iterator insert(const_iterator, const T &); + iterator insert(const_iterator, T &&); + iterator insert(const_iterator, size_type, const T &); + template<typename InIt> iterator insert(const_iterator, InIt, InIt); + iterator insert(const_iterator, std::initializer_list< value_type >); + void pop_back() noexcept; + iterator erase(const_iterator); + iterator erase(const_iterator, const_iterator); + void swap(vector &) noexcept(((allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)&&!container_detail::is_version< Allocator, 0 >::value))); + void clear() noexcept; - // friend functions - friend bool operator==(const vector &, const vector &); - friend bool operator!=(const vector &, const vector &); - friend bool operator<(const vector &, const vector &); - friend bool operator>(const vector &, const vector &); - friend bool operator<=(const vector &, const vector &); - friend bool operator>=(const vector &, const vector &); - friend void swap(vector &, vector &); + // friend functions + friend bool operator==(const vector &, const vector &); + friend bool operator!=(const vector &, const vector &); + friend bool operator<(const vector &, const vector &); + friend bool operator>(const vector &, const vector &); + friend bool operator<=(const vector &, const vector &); + friend bool operator>=(const vector &, const vector &); + friend void swap(vector &, vector &); };
            -

            Description

            +

            Description

            A vector is a sequence that supports random access to elements, constant time insertion and removal of elements at the end, and linear time insertion and removal of elements at the beginning or in the middle. The number of elements in a vector may vary dynamically; memory management is automatic.

            -

            Template Parameters

            +

            Template Parameters

            1. typename T
              @@ -159,128 +159,128 @@
            -

            +

            vector public construct/copy/destruct

            1. -
              vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));
              +
              vector() noexcept(container_detail::is_nothrow_default_constructible< Allocator >::value));

              Effects: Constructs a vector taking the allocator as parameter.

              Throws: Nothing.

              Complexity: Constant.

            2. -
              explicit vector(const allocator_type & a) noexcept;
              +
              explicit vector(const allocator_type & a) noexcept;

              Effects: Constructs a vector taking the allocator as parameter.

              Throws: Nothing

              Complexity: Constant.

            3. -
              explicit vector(size_type n);
              +
              explicit vector(size_type n);

              Effects: Constructs a vector and inserts n value initialized values.

              Throws: If allocator_type's allocation throws or T's value initialization throws.

              Complexity: Linear to n.

            4. -
              explicit vector(size_type n, const allocator_type & a);
              +
              explicit vector(size_type n, const allocator_type & a);

              Effects: Constructs a vector that will use a copy of allocator a and inserts n value initialized values.

              Throws: If allocator_type's allocation throws or T's value initialization throws.

              Complexity: Linear to n.

            5. -
              vector(size_type n, default_init_t);
              +
              vector(size_type n, default_init_t);

              Effects: Constructs a vector that will use a copy of allocator a and inserts n default initialized values.

              Throws: If allocator_type's allocation throws or T's default initialization throws.

              Complexity: Linear to n.

              Note: Non-standard extension

            6. -
              vector(size_type n, default_init_t, const allocator_type & a);
              +
              vector(size_type n, default_init_t, const allocator_type & a);

              Effects: Constructs a vector that will use a copy of allocator a and inserts n default initialized values.

              Throws: If allocator_type's allocation throws or T's default initialization throws.

              Complexity: Linear to n.

              Note: Non-standard extension

            7. -
              vector(size_type n, const T & value);
              +
              vector(size_type n, const T & value);

              Effects: Constructs a vector and inserts n copies of value.

              Throws: If allocator_type's allocation throws or T's copy constructor throws.

              Complexity: Linear to n.

            8. -
              vector(size_type n, const T & value, const allocator_type & a);
              +
              vector(size_type n, const T & value, const allocator_type & a);

              Effects: Constructs a vector that will use a copy of allocator a and inserts n copies of value.

              Throws: If allocation throws or T's copy constructor throws.

              Complexity: Linear to n.

            9. -
              template<typename InIt> vector(InIt first, InIt last  BOOST_CONTAINER_DOCIGN);
              +
              template<typename InIt> vector(InIt first, InIt last  BOOST_CONTAINER_DOCIGN);

              Effects: Constructs a vector and inserts a copy of the range [first, last) in the vector.

              Throws: If allocator_type's allocation throws or T's constructor taking a dereferenced InIt throws.

              Complexity: Linear to the range [first, last).

            10. template<typename InIt> 
              -  vector(InIt first, InIt last, 
              +  vector(InIt first, InIt last, 
                        const allocator_type &a  BOOST_CONTAINER_DOCIGN);

              Effects: Constructs a vector that will use a copy of allocator a and inserts a copy of the range [first, last) in the vector.

              Throws: If allocator_type's allocation throws or T's constructor taking a dereferenced InIt throws.

              Complexity: Linear to the range [first, last).

            11. -
              vector(const vector & x);
              +
              vector(const vector & x);

              Effects: Copy constructs a vector.

              Postcondition: x == *this.

              Throws: If allocator_type's allocation throws or T's copy constructor throws.

              Complexity: Linear to the elements x contains.

            12. -
              vector(vector && x) noexcept;
              +
              vector(vector && x) noexcept;

              Effects: Move constructor. Moves x's resources to *this.

              Throws: Nothing

              Complexity: Constant.

            13. -
              vector(std::initializer_list< value_type > il, 
              +
              vector(std::initializer_list< value_type > il, 
                      const allocator_type & a = allocator_type());

              Effects: Constructs a vector that will use a copy of allocator a and inserts a copy of the range [il.begin(), il.last()) in the vector

              Throws: If T's constructor taking a dereferenced initializer_list iterator throws.

              Complexity: Linear to the range [il.begin(), il.end()).

            14. -
              vector(const vector & x, const allocator_type & a);
              defined(BOOST_CONTAINER_DOXYGEN_INVOKED)

              Effects: Copy constructs a vector using the specified allocator.

              +
              vector(const vector & x, const allocator_type & a);
              defined(BOOST_CONTAINER_DOXYGEN_INVOKED)

              Effects: Copy constructs a vector using the specified allocator.

              Postcondition: x == *this.

              Throws: If allocation throws or T's copy constructor throws.

              Complexity: Linear to the elements x contains.

            15. -
              vector(vector && x, const allocator_type & a);
              +
              vector(vector && x, const allocator_type & a);

              Effects: Move constructor using the specified allocator. Moves x's resources to *this if a == allocator_type(). Otherwise copies values from x to *this.

              Throws: If allocation or T's copy constructor throws.

              Complexity: Constant if a == x.get_allocator(), linear otherwise.

            16. -
              vector & operator=(const vector & x);
              +
              vector & operator=(const vector & x);

              Effects: Makes *this contain the same elements as x.

              Postcondition: this->size() == x.size(). *this contains a copy of each of x's elements.

              Throws: If memory allocation throws or T's copy/move constructor/assignment throws.

              Complexity: Linear to the number of elements in x.

            17. -
              vector & operator=(std::initializer_list< value_type > il);
              +
              vector & operator=(std::initializer_list< value_type > il);

              Effects: Make *this container contains elements from il.

              Complexity: Linear to the range [il.begin(), il.end()).

            18. -
              vector & operator=(vector && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));
              +
              vector & operator=(vector && x) noexcept(allocator_traits_type::propagate_on_container_move_assignment::value||allocator_traits_type::is_always_equal::value));

              Effects: Move assignment. All x's values are transferred to *this.

              Postcondition: x.empty(). *this contains a the elements x had before the function.

              Throws: If allocator_traits_type::propagate_on_container_move_assignment is false and (allocation throws or value_type's move constructor throws)

              Complexity: Constant if allocator_traits_type:: propagate_on_container_move_assignment is true or this->get>allocator() == x.get_allocator(). Linear otherwise.

            19. -
              ~vector();
              +
              ~vector();

              Effects: Destroys the vector. All stored values are destroyed and used memory is deallocated.

              Throws: Nothing.

              Complexity: Linear to the number of elements.

              @@ -288,224 +288,224 @@
            -

            -vector public member functions

            +

            +vector public member functions

            1. template<typename InIt> 
              -  void assign(InIt first, InIt last  BOOST_CONTAINER_DOCIGN);
              + void assign(InIt first, InIt last BOOST_CONTAINER_DOCIGN);

              Effects: Assigns the the range [first, last) to *this.

              Throws: If memory allocation throws or T's copy/move constructor/assignment or T's constructor/assignment from dereferencing InpIt throws.

              Complexity: Linear to n.

            2. -
              void assign(std::initializer_list< T > il);
              +
              void assign(std::initializer_list< T > il);

              Effects: Assigns the the range [il.begin(), il.end()) to *this.

              Throws: If memory allocation throws or T's constructor from dereferencing iniializer_list iterator throws.

            3. template<typename FwdIt> 
              -  void assign(FwdIt first, FwdIt last  BOOST_CONTAINER_DOCIGN);
              + void assign(FwdIt first, FwdIt last BOOST_CONTAINER_DOCIGN);

              Effects: Assigns the the range [first, last) to *this.

              Throws: If memory allocation throws or T's copy/move constructor/assignment or T's constructor/assignment from dereferencing InpIt throws.

              Complexity: Linear to n.

            4. -
              void assign(size_type n, const value_type & val);
              +
              void assign(size_type n, const value_type & val);

              Effects: Assigns the n copies of val to *this.

              Throws: If memory allocation throws or T's copy/move constructor/assignment throws.

              Complexity: Linear to n.

            5. -
              allocator_type get_allocator() const noexcept;
              +
              allocator_type get_allocator() const noexcept;

              Effects: Returns a copy of the internal allocator.

              Throws: If allocator's copy constructor throws.

              Complexity: Constant.

            6. -
              stored_allocator_type & get_stored_allocator() noexcept;
              +
              stored_allocator_type & get_stored_allocator() noexcept;

              Effects: Returns a reference to the internal allocator.

              Throws: Nothing

              Complexity: Constant.

              Note: Non-standard extension.

            7. -
              const stored_allocator_type & get_stored_allocator() const noexcept;
              +
              const stored_allocator_type & get_stored_allocator() const noexcept;

              Effects: Returns a reference to the internal allocator.

              Throws: Nothing

              Complexity: Constant.

              Note: Non-standard extension.

            8. -
              iterator begin() noexcept;
              +
              iterator begin() noexcept;

              Effects: Returns an iterator to the first element contained in the vector.

              Throws: Nothing.

              Complexity: Constant.

            9. -
              const_iterator begin() const noexcept;
              +
              const_iterator begin() const noexcept;

              Effects: Returns a const_iterator to the first element contained in the vector.

              Throws: Nothing.

              Complexity: Constant.

            10. -
              iterator end() noexcept;
              +
              iterator end() noexcept;

              Effects: Returns an iterator to the end of the vector.

              Throws: Nothing.

              Complexity: Constant.

            11. -
              const_iterator end() const noexcept;
              +
              const_iterator end() const noexcept;

              Effects: Returns a const_iterator to the end of the vector.

              Throws: Nothing.

              Complexity: Constant.

            12. -
              reverse_iterator rbegin() noexcept;
              +
              reverse_iterator rbegin() noexcept;

              Effects: Returns a reverse_iterator pointing to the beginning of the reversed vector.

              Throws: Nothing.

              Complexity: Constant.

            13. -
              const_reverse_iterator rbegin() const noexcept;
              +
              const_reverse_iterator rbegin() const noexcept;

              Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed vector.

              Throws: Nothing.

              Complexity: Constant.

            14. -
              reverse_iterator rend() noexcept;
              +
              reverse_iterator rend() noexcept;

              Effects: Returns a reverse_iterator pointing to the end of the reversed vector.

              Throws: Nothing.

              Complexity: Constant.

            15. -
              const_reverse_iterator rend() const noexcept;
              +
              const_reverse_iterator rend() const noexcept;

              Effects: Returns a const_reverse_iterator pointing to the end of the reversed vector.

              Throws: Nothing.

              Complexity: Constant.

            16. -
              const_iterator cbegin() const noexcept;
              +
              const_iterator cbegin() const noexcept;

              Effects: Returns a const_iterator to the first element contained in the vector.

              Throws: Nothing.

              Complexity: Constant.

            17. -
              const_iterator cend() const noexcept;
              +
              const_iterator cend() const noexcept;

              Effects: Returns a const_iterator to the end of the vector.

              Throws: Nothing.

              Complexity: Constant.

            18. -
              const_reverse_iterator crbegin() const noexcept;
              +
              const_reverse_iterator crbegin() const noexcept;

              Effects: Returns a const_reverse_iterator pointing to the beginning of the reversed vector.

              Throws: Nothing.

              Complexity: Constant.

            19. -
              const_reverse_iterator crend() const noexcept;
              +
              const_reverse_iterator crend() const noexcept;

              Effects: Returns a const_reverse_iterator pointing to the end of the reversed vector.

              Throws: Nothing.

              Complexity: Constant.

            20. -
              bool empty() const noexcept;
              +
              bool empty() const noexcept;

              Effects: Returns true if the vector contains no elements.

              Throws: Nothing.

              Complexity: Constant.

            21. -
              size_type size() const noexcept;
              +
              size_type size() const noexcept;

              Effects: Returns the number of the elements contained in the vector.

              Throws: Nothing.

              Complexity: Constant.

            22. -
              size_type max_size() const noexcept;
              +
              size_type max_size() const noexcept;

              Effects: Returns the largest possible size of the vector.

              Throws: Nothing.

              Complexity: Constant.

            23. -
              void resize(size_type new_size);
              +
              void resize(size_type new_size);

              Effects: Inserts or erases elements at the end such that the size becomes n. New elements are value initialized.

              Throws: If memory allocation throws, or T's copy/move or value initialization throws.

              Complexity: Linear to the difference between size() and new_size.

            24. -
              void resize(size_type new_size, default_init_t);
              +
              void resize(size_type new_size, default_init_t);

              Effects: Inserts or erases elements at the end such that the size becomes n. New elements are default initialized.

              Throws: If memory allocation throws, or T's copy/move or default initialization throws.

              Complexity: Linear to the difference between size() and new_size.

              Note: Non-standard extension

            25. -
              void resize(size_type new_size, const T & x);
              +
              void resize(size_type new_size, const T & x);

              Effects: Inserts or erases elements at the end such that the size becomes n. New elements are copy constructed from x.

              Throws: If memory allocation throws, or T's copy/move constructor throws.

              Complexity: Linear to the difference between size() and new_size.

            26. -
              size_type capacity() const noexcept;
              +
              size_type capacity() const noexcept;

              Effects: Number of elements for which memory has been allocated. capacity() is always greater than or equal to size().

              Throws: Nothing.

              Complexity: Constant.

            27. -
              void reserve(size_type new_cap);
              +
              void reserve(size_type new_cap);

              Effects: If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

              Throws: If memory allocation allocation throws or T's copy/move constructor throws.

            28. -
              void shrink_to_fit();
              +
              void shrink_to_fit();

              Effects: Tries to deallocate the excess of memory created with previous allocations. The size of the vector is unchanged

              Throws: If memory allocation throws, or T's copy/move constructor throws.

              Complexity: Linear to size().

            29. -
              reference front() noexcept;
              +
              reference front() noexcept;

              Requires: !empty()

              Effects: Returns a reference to the first element of the container.

              Throws: Nothing.

              Complexity: Constant.

            30. -
              const_reference front() const noexcept;
              +
              const_reference front() const noexcept;

              Requires: !empty()

              Effects: Returns a const reference to the first element of the container.

              Throws: Nothing.

              Complexity: Constant.

            31. -
              reference back() noexcept;
              +
              reference back() noexcept;

              Requires: !empty()

              Effects: Returns a reference to the last element of the container.

              Throws: Nothing.

              Complexity: Constant.

            32. -
              const_reference back() const noexcept;
              +
              const_reference back() const noexcept;

              Requires: !empty()

              Effects: Returns a const reference to the last element of the container.

              Throws: Nothing.

              Complexity: Constant.

            33. -
              reference operator[](size_type n) noexcept;
              +
              reference operator[](size_type n) noexcept;

              Requires: size() > n.

              Effects: Returns a reference to the nth element from the beginning of the container.

              Throws: Nothing.

              Complexity: Constant.

            34. -
              const_reference operator[](size_type n) const noexcept;
              +
              const_reference operator[](size_type n) const noexcept;

              Requires: size() > n.

              Effects: Returns a const reference to the nth element from the beginning of the container.

              Throws: Nothing.

              Complexity: Constant.

            35. -
              iterator nth(size_type n) noexcept;
              +
              iterator nth(size_type n) noexcept;

              Requires: size() >= n.

              Effects: Returns an iterator to the nth element from the beginning of the container. Returns end() if n == size().

              Throws: Nothing.

              @@ -513,7 +513,7 @@

              Note: Non-standard extension

            36. -
              const_iterator nth(size_type n) const noexcept;
              +
              const_iterator nth(size_type n) const noexcept;

              Requires: size() >= n.

              Effects: Returns a const_iterator to the nth element from the beginning of the container. Returns end() if n == size().

              Throws: Nothing.

              @@ -521,7 +521,7 @@

              Note: Non-standard extension

            37. -
              size_type index_of(iterator p) noexcept;
              +
              size_type index_of(iterator p) noexcept;

              Requires: begin() <= p <= end().

              Effects: Returns the index of the element pointed by p and size() if p == end().

              Throws: Nothing.

              @@ -529,7 +529,7 @@

              Note: Non-standard extension

            38. -
              size_type index_of(const_iterator p) const noexcept;
              +
              size_type index_of(const_iterator p) const noexcept;

              Requires: begin() <= p <= end().

              Effects: Returns the index of the element pointed by p and size() if p == end().

              Throws: Nothing.

              @@ -537,40 +537,40 @@

              Note: Non-standard extension

            39. -
              reference at(size_type n);
              +
              reference at(size_type n);

              Requires: size() > n.

              Effects: Returns a reference to the nth element from the beginning of the container.

              Throws: std::range_error if n >= size()

              Complexity: Constant.

            40. -
              const_reference at(size_type n) const;
              +
              const_reference at(size_type n) const;

              Requires: size() > n.

              Effects: Returns a const reference to the nth element from the beginning of the container.

              Throws: std::range_error if n >= size()

              Complexity: Constant.

            41. -
              T * data() noexcept;
              +
              T * data() noexcept;

              Returns: A pointer such that [data(),data() + size()) is a valid range. For a non-empty vector, data() == &front().

              Throws: Nothing.

              Complexity: Constant.

            42. -
              const T * data() const noexcept;
              +
              const T * data() const noexcept;

              Returns: A pointer such that [data(),data() + size()) is a valid range. For a non-empty vector, data() == &front().

              Throws: Nothing.

              Complexity: Constant.

            43. -
              template<class... Args> reference emplace_back(Args &&... args);
              +
              template<class... Args> reference emplace_back(Args &&... args);

              Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the end of the vector.

              Returns: A reference to the created object.

              Throws: If memory allocation throws or the in-place constructor throws or T's copy/move constructor throws.

              Complexity: Amortized constant time.

            44. -
              template<class... Args> bool stable_emplace_back(Args &&... args);
              +
              template<class... Args> bool stable_emplace_back(Args &&... args);

              Effects: Inserts an object of type T constructed with std::forward<Args>(args)... in the end of the vector.

              Throws: If the in-place constructor throws.

              Complexity: Constant time.

              @@ -578,40 +578,40 @@
            45. template<class... Args> 
              -  iterator emplace(const_iterator position, Args &&... args);
              + iterator emplace(const_iterator position, Args &&... args);

              Requires: position must be a valid iterator of *this.

              Effects: Inserts an object of type T constructed with std::forward<Args>(args)... before position

              Throws: If memory allocation throws or the in-place constructor throws or T's copy/move constructor/assignment throws.

              Complexity: If position is end(), amortized constant time Linear time otherwise.

            46. -
              void push_back(const T & x);
              +
              void push_back(const T & x);

              Effects: Inserts a copy of x at the end of the vector.

              Throws: If memory allocation throws or T's copy/move constructor throws.

              Complexity: Amortized constant time.

            47. -
              void push_back(T && x);
              +
              void push_back(T && x);

              Effects: Constructs a new element in the end of the vector and moves the resources of x to this new element.

              Throws: If memory allocation throws or T's copy/move constructor throws.

              Complexity: Amortized constant time.

            48. -
              iterator insert(const_iterator position, const T & x);
              +
              iterator insert(const_iterator position, const T & x);

              Requires: position must be a valid iterator of *this.

              Effects: Insert a copy of x before position.

              Throws: If memory allocation throws or T's copy/move constructor/assignment throws.

              Complexity: If position is end(), amortized constant time Linear time otherwise.

            49. -
              iterator insert(const_iterator position, T && x);
              +
              iterator insert(const_iterator position, T && x);

              Requires: position must be a valid iterator of *this.

              Effects: Insert a new element before position with x's resources.

              Throws: If memory allocation throws.

              Complexity: If position is end(), amortized constant time Linear time otherwise.

            50. -
              iterator insert(const_iterator p, size_type n, const T & x);
              +
              iterator insert(const_iterator p, size_type n, const T & x);

              Requires: p must be a valid iterator of *this.

              Effects: Insert n copies of x before pos.

              Returns: an iterator to the first inserted element or p if n is 0.

              @@ -620,7 +620,7 @@
            51. template<typename InIt> 
              -  iterator insert(const_iterator pos, InIt first, InIt last);
              + iterator insert(const_iterator pos, InIt first, InIt last);

              Requires: p must be a valid iterator of *this.

              Effects: Insert a copy of the [first, last) range before pos.

              Returns: an iterator to the first inserted element or pos if first == last.

              @@ -628,7 +628,7 @@

              Complexity: Linear to boost::container::iterator_distance [first, last).

            52. -
              iterator insert(const_iterator position, 
              +
              iterator insert(const_iterator position, 
                               std::initializer_list< value_type > il);

              Requires: p must be a valid iterator of *this. num, must be equal to boost::container::iterator_distance(first, last)

              Effects: Insert a copy of the [first, last) range before pos.

              @@ -641,31 +641,31 @@

              Complexity: Linear to the range [il.begin(), il.end()).

            53. -
              void pop_back() noexcept;
              +
              void pop_back() noexcept;

              Effects: Removes the last element from the container.

              Throws: Nothing.

              Complexity: Constant time.

            54. -
              iterator erase(const_iterator position);
              +
              iterator erase(const_iterator position);

              Effects: Erases the element at position pos.

              Throws: Nothing.

              Complexity: Linear to the elements between pos and the last element. Constant if pos is the last element.

            55. -
              iterator erase(const_iterator first, const_iterator last);
              +
              iterator erase(const_iterator first, const_iterator last);

              Effects: Erases the elements pointed by [first, last).

              Throws: Nothing.

              Complexity: Linear to the distance between first and last plus linear to the elements between pos and the last element.

            56. -
              void swap(vector & x) noexcept(((allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)&&!container_detail::is_version< Allocator, 0 >::value)));
              +
              void swap(vector & x) noexcept(((allocator_traits_type::propagate_on_container_swap::value||allocator_traits_type::is_always_equal::value)&&!container_detail::is_version< Allocator, 0 >::value)));

              Effects: Swaps the contents of *this and x.

              Throws: Nothing.

              Complexity: Constant.

            57. -
              void clear() noexcept;
              +
              void clear() noexcept;

              Effects: Erases all the elements of the vector.

              Throws: Nothing.

              Complexity: Linear to the number of elements in the container.

              @@ -673,41 +673,41 @@
            -

            -vector friend functions

            +

            +vector friend functions

            1. -
              friend bool operator==(const vector & x, const vector & y);
              +
              friend bool operator==(const vector & x, const vector & y);

              Effects: Returns true if x and y are equal

              Complexity: Linear to the number of elements in the container.

            2. -
              friend bool operator!=(const vector & x, const vector & y);
              +
              friend bool operator!=(const vector & x, const vector & y);

              Effects: Returns true if x and y are unequal

              Complexity: Linear to the number of elements in the container.

            3. -
              friend bool operator<(const vector & x, const vector & y);
              +
              friend bool operator<(const vector & x, const vector & y);

              Effects: Returns true if x is less than y

              Complexity: Linear to the number of elements in the container.

            4. -
              friend bool operator>(const vector & x, const vector & y);
              +
              friend bool operator>(const vector & x, const vector & y);

              Effects: Returns true if x is greater than y

              Complexity: Linear to the number of elements in the container.

            5. -
              friend bool operator<=(const vector & x, const vector & y);
              +
              friend bool operator<=(const vector & x, const vector & y);

              Effects: Returns true if x is equal or less than y

              Complexity: Linear to the number of elements in the container.

            6. -
              friend bool operator>=(const vector & x, const vector & y);
              +
              friend bool operator>=(const vector & x, const vector & y);

              Effects: Returns true if x is equal or greater than y

              Complexity: Linear to the number of elements in the container.

            7. -
              friend void swap(vector & x, vector & y);
              +
              friend void swap(vector & x, vector & y);

              Effects: x.swap(y)

              Complexity: Constant.

            8. diff --git a/doc/html/boost/container/wstring.html b/doc/html/boost/container/wstring.html index 94db489cf8..06d8f4e687 100644 --- a/doc/html/boost/container/wstring.html +++ b/doc/html/boost/container/wstring.html @@ -35,7 +35,7 @@ typedef basic_string< wchar_t,std::char_traits< wchar_t >,new_allocator< wchar_t > > wstring;
            -

            Description

            +

            Description

            Typedef for a basic_string of narrow characters

            -- cgit v1.2.3