This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

191
cppdraft/hive/operations.md Normal file
View File

@@ -0,0 +1,191 @@
[hive.operations]
# 23 Containers library [[containers]](./#containers)
## 23.3 Sequence containers [[sequences]](sequences#hive.operations)
### 23.3.9 Class template hive [[hive]](hive#operations)
#### 23.3.9.5 Operations [hive.operations]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8790)
In this subclause,
arguments for a template parameter
named Predicate or BinaryPredicate shall meet the corresponding requirements in [[algorithms.requirements]](algorithms.requirements "26.2Algorithms requirements")[.](#1.sentence-1)
The semantics of i + n and i - n,
where i is an iterator into the hive and n is an integer,
are the same as those of next(i, n) and prev(i, n), respectively[.](#1.sentence-2)
For sort, the definitions and requirements in [[alg.sorting]](alg.sorting "26.8Sorting and related operations") apply[.](#1.sentence-3)
[🔗](#lib:splice,hive)
`void splice(hive& x);
void splice(hive&& x);
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8807)
*Preconditions*: get_allocator() == x.get_allocator() is true[.](#2.sentence-1)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8811)
*Effects*: If addressof(x) == this is true,
the behavior is erroneous and there are no effects[.](#3.sentence-1)
Otherwise, inserts the contents of x into *this andx becomes empty[.](#3.sentence-2)
Pointers and references to the moved elements of x now refer to those same elements but as members of *this[.](#3.sentence-3)
Iterators referring to the moved elements continue to refer to their elements,
but they now behave as iterators into *this, not into x[.](#3.sentence-4)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8822)
*Throws*: length_error if any of x's active blocks
are not within the bounds of *current-limits*[.](#4.sentence-1)
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8827)
*Complexity*: Linear in the sum of
all element blocks in x plus all element blocks in *this[.](#5.sentence-1)
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8832)
*Remarks*: Reserved blocks in x are not transferred into *this[.](#6.sentence-1)
If addressof(x) == this is false,
invalidates the past-the-end iterator for both x and *this[.](#6.sentence-2)
[🔗](#lib:unique,hive)
`template<class BinaryPredicate = equal_to<T>>
size_type unique(BinaryPredicate binary_pred = BinaryPredicate());
`
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8846)
*Preconditions*: binary_pred is an equivalence relation[.](#7.sentence-1)
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8850)
*Effects*: Erases all but the first element
from every consecutive group of equivalent elements[.](#8.sentence-1)
That is, for a nonempty hive,
erases all elements referred to by the iterator i in the range [begin() + 1, end())
for which binary_pred(*i, *(i - 1)) is true[.](#8.sentence-2)
[9](#9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8859)
*Returns*: The number of elements erased[.](#9.sentence-1)
[10](#10)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8863)
*Throws*: Nothing unless an exception is thrown by the predicate[.](#10.sentence-1)
[11](#11)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8867)
*Complexity*: If empty() is false,
exactly size() - 1 applications of the corresponding predicate,
otherwise no applications of the predicate[.](#11.sentence-1)
[12](#12)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8873)
*Remarks*: Invalidates references, pointers, and iterators
referring to the erased elements[.](#12.sentence-1)
If the last element in *this is erased,
also invalidates the past-the-end iterator[.](#12.sentence-2)
[🔗](#lib:sort,hive)
`template<class Compare = less<T>>
void sort(Compare comp = Compare());
`
[13](#13)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8888)
*Preconditions*: T is *Cpp17MoveInsertable* into hive,*Cpp17MoveAssignable*, and *Cpp17Swappable*[.](#13.sentence-1)
[14](#14)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8893)
*Effects*: Sorts *this according to the comp function object[.](#14.sentence-1)
If an exception is thrown,
the order of the elements in *this is unspecified[.](#14.sentence-2)
[15](#15)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8899)
*Complexity*: O(NlogN) comparisons, where N is size()[.](#15.sentence-1)
[16](#16)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8903)
*Remarks*: May allocate[.](#16.sentence-1)
References, pointers, and iterators referring to elements in *this,
as well as the past-the-end iterator, may be invalidated[.](#16.sentence-2)
[*Note [1](#note-1)*:
Not required to be stable[[algorithm.stable]](algorithm.stable "16.4.6.8Requirements for stable algorithms")[.](#16.sentence-3)
— *end note*]
[🔗](#lib:get_iterator,hive)
`iterator get_iterator(const_pointer p) noexcept;
const_iterator get_iterator(const_pointer p) const noexcept;
`
[17](#17)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8920)
*Preconditions*: p points to an element in *this[.](#17.sentence-1)
[18](#18)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8924)
*Returns*: An iterator or const_iterator pointing to the same element as p[.](#18.sentence-1)
[19](#19)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8929)
*Complexity*: Linear in the number of active blocks in *this[.](#19.sentence-1)