...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
devector
's insertion
logic has been reimplemented to move elements to the center of the devector
if an insertion at one end has no free capacity but there is free capacity
on the other end. Current implementation keeps reallocating memory when
only inserting at one end and poping from the other, provoking very high
memory usage. The new strategy is based on the article Double-ended
vector - is it useful? by Lars Greger Nordland Hagen.
boost/container/vector.hpp
preprocessed file size reduces
from 1,5MB to 930KB. If you still want to use standard exception classes,
you can define BOOST_CONTAINER_USE_STD_EXCEPTIONS
before using any Boost.Container class.
pmr::map
with a std::pair
; works when using a std::tuple
".
devector
container.
equal_range
can result in a range
with length greater than 1".
deque
can now have
options, using deque_options
.
The block size/bytes can be be specified.
static_vector
can now have options, using static_vector_options
.
Alignment and throwing behaviour can be be specified.
small_vector
can now have options, using small_vector_options
.
Alignment and growth factor can be be specified.
new_allocator<T>
to void
to reduce symbol lenghts.
contains()
for associative containers as specified
in P0458R2:
Checking for Existence of an Element in Associative Containers.
adaptive_pool
and many parameters are now compile-time constants instead of runtime
constants.
[multi]map/[multi]set/flat_[multi]map/flat_[multi]set
.
unsynchronized_pool_resource
found by Arthur O'Dowyer in his blog post <memory_resource>
for libc++
release()
the original buffer is recovered for the next allocation.
vector_options
.
The growth factor and the stored size type can be specified.
extract_sequence
,
adopt_sequence
functions
for flat_[multi]map/set associative containers.
static_vector<>::static_capacity
to use the configured capacity in constant expressions.
insert_or_assign
/try_emplace
for map
and flat_map
.
map
,
multimap
, set
, multiset
.
deque
,
vector
, stable_vector
, small_vector
,
static_vector
, list
and slist
.
boost::container::small_vector
supports more constructors and assignments.
pop_back
, pop_front
, back
,
front
, etc.)
back
/front
operations to basic_string
.
small_vector
container.
nth
and index_of
functions to containers with
random-access iterators (except basic_string
).
allocator_traits<Allocator>::is_always_equal
.
scoped_allocator_adaptor
's
propagate_on_container_copy_assignment
,
propagate_on_container_move_assignment
and propagate_on_container_swap
are no longer ::boost::integral_constant<bool, true/false>
types. The dependency reorganization
needed to break with those classes to avoid MPL dependencies, and interoperability
with std::integral_constant
was not guaranteed.
Code assumming boost::true_type/boost::false_type
on this will not compile. As a workaround, use the guaranteed internal
::value
constant: ::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>
.
initializer_list
.
Contributed by Robert Matusewicz.
set
, multiset
,
map
and multimap
.
static_vector
class, based on Andrew Hundt's and Adam Wulkiewicz's high performance
varray
class.
vector
constructors/copy/move/swap, dispatching to memcpy when possible.
BOOST_NO_EXCEPTIONS
#7227.
vector
's insertion
performance.
stable_vector
's
template code bloat and type safety.