]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/bimap/doc/reference/vector_of.qbk
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / bimap / doc / reference / vector_of.qbk
CommitLineData
7c673cae
FG
1[/license
2
3Boost.Bimap
4
5Copyright (c) 2006-2007 Matias Capeletto
6
7Distributed under the Boost Software License, Version 1.0.
8(See accompanying file LICENSE_1_0.txt or copy at
9http://www.boost.org/LICENSE_1_0.txt)
10
11]
12
13[/ QuickBook Document version 1.4 ]
14
15[section vector_of Reference]
16
17[section Header "boost/bimap/vector_of.hpp" synopsis]
18
19 namespace boost {
20 namespace bimaps {
21
22
23 template< class KeyType >
24 struct vector_of;
25
26 struct vector_of_relation;
27
28
29 } // namespace bimap
30 } // namespace boost
31
32
33[endsect]
34
35[section vector_of views]
36
37vector_of views are free-order sequences with constant time positional
38access and random access iterators. Elements in a vector_of view are by
39default sorted according to their order of insertion: this means that new elements
40inserted through a different view of the `bimap` are appended to
41the end of the vector_of view; additionally, facilities are provided for
42further rearrangement of the elements. The public interface of vector_of views
43includes that of list_of views, with differences in the complexity
44of the operations, plus extra operations for positional access
45(`operator[]` and `at()`) and for capacity handling. Validity of iterators and
46references to elements is preserved in all operations, regardless of the
47capacity status.
48
49As is the case with list_of views, vector_of views have the following
50limitations with respect to STL sequence containers:
51
52* vector_of views
53are not __SGI_ASSIGNABLE__ (like any other view.)
54* Insertions into a vector_of view may fail due to clashings with other views.
55This alters the semantics of the operations provided with respect to their analogues
56in STL sequence containers.
57* Elements in a vector_of view are not mutable, and can only be changed by
58means of replace and modify member functions.
59
60Having these restrictions into account, vector of views are models of
61__SGI_RANDOM_ACCESS_CONTAINER__ and __SGI_BACK_INSERTION_SEQUENCE__. Although these views
62do not model __SGI_FRONT_INSERTION_SEQUENCE__, because front insertion and deletion
63take linear time, front operations are nonetheless provided to match the interface
64of list_of views. We only describe those types and operations that are either
65not present in the concepts modeled or do not exactly conform to the requirements
66for these types of containers.
67
68
69 namespace boost {
70 namespace bimaps {
71 namespace views {
72
73 template< ``['-implementation defined parameter list-]`` >
74 class ``['-implementation defined view name-]``
75 {
76 public:
77
78 // types
79
80 typedef ``['-unspecified-]`` value_type;
81 typedef ``['-unspecified-]`` allocator_type;
82 typedef ``['-unspecified-]`` reference;
83 typedef ``['-unspecified-]`` const_reference;
84 typedef ``['-unspecified-]`` iterator;
85 typedef ``['-unspecified-]`` const_iterator;
86 typedef ``['-unspecified-]`` size_type;
87 typedef ``['-unspecified-]`` difference_type;
88 typedef ``['-unspecified-]`` pointer;
89 typedef ``['-unspecified-]`` const_pointer;
90 typedef ``['-unspecified-]`` reverse_iterator;
91 typedef ``['-unspecified-]`` const_reverse_iterator;
92
93 typedef ``['-unspecified-]`` info_type;
94
95 // construct / copy / destroy
96
97 this_type & operator=(this_type & x);
98
99 template< class InputIterator >
100 void ``[link reference_vector_of_assign_iterator_iterator assign]``(InputIterator first, InputIterator last);
101
102 void ``[link reference_vector_of_assign_size_value assign]``(size_type n, const value_type & value);
103
104 allocator_type get_allocator() const;
105
106 // iterators
107
108 iterator begin();
109 const_iterator begin() const;
110
111 iterator end();
112 const_iterator end() const;
113
114 reverse_iterator rbegin();
115 const_reverse_iterator rbegin() const;
116
117 reverse_iterator rend();
118 const_reverse_iterator rend() const;
119
120 // capacity
121
122 bool empty() const;
123
124 size_type size() const;
125
126 size_type max_size() const;
127
128 size_type ``[link reference_vector_of_capacity capacity]``() const;
129
130 void ``[link reference_vector_of_reserve_size reserve]``(size_type m);
131
132 void ``[link reference_vector_of_resize_size_value resize]``(size_type n, const value_type & x = value_type());
133
134 // access
135
136 const_reference operator[](size_type n) const;
137
138 const_reference at(size_type n) const;
139
140 const_reference front() const;
141
142 const_reference back() const;
143
144 // modifiers
145
146 std::pair<iterator,bool> ``[link reference_vector_of_push_front_value push_front]``(const value_type & x);
147 void pop_front();
148
149 std::pair<iterator,bool> ``[link reference_vector_of_push_back_value push_back]``(const value_type & x);
150 void pop_back();
151
152 std::pair<iterator,bool> ``[link reference_vector_of_insert_iterator_value insert]``(iterator position, const value_type & x);
153
154 void ``[link reference_vector_of_insert_iterator_size_value insert]``(iterator position, size_type m, const value_type & x);
155
156 template< class InputIterator>
157 void ``[link reference_vector_of_insert_iterator_iterator_iterator insert]``(iterator position, InputIterator first, InputIterator last);
158
159 iterator ``[link reference_vector_of_erase_iterator erase]``(iterator position);
160 iterator ``[link reference_vector_of_erase_iterator_iterator erase]``(iterator first, iterator last);
161
162 bool ``[link reference_vector_of_replace_iterator_value replace]``(iterator position, const value_type & x);
163
164 // Only in map views
165 // {
166 typedef ``['-unspecified-]`` key_type;
167 typedef ``['-unspecified-]`` mapped_type;
168 typedef ``['-unspecified-]`` data_type; // Equal to mapped_type
169
170 template< class CompatibleKey >
171 bool ``[link reference_vector_of_replace_key_iterator_key replace_key]``(iterator position, const CompatibleKey & x);
172
173 template< class CompatibleData >
174 bool ``[link reference_vector_of_replace_data_iterator_data replace_data]``(iterator position, const CompatibleData & x);
175
176 template< class KeyModifier >
177 bool ``[link reference_vector_of_modify_key_iterator_modifier modify_key]``(iterator position, KeyModifier mod);
178
179 template< class DataModifier >
180 bool ``[link reference_vector_of_modify_data_iterator_modifier modify_data]``(iterator position, DataModifier mod);
181
182 // }
183
184
185 void clear();
186
187 // list operations
188
189 void ``[link reference_vector_of_splice_iterator_this splice]``(iterator position, this_type & x);
190 void ``[link reference_vector_of_splice_iterator_this_iterator splice]``(iterator position, this_type & x, iterator i);
191 void ``[link reference_vector_of_splice_iterator_this_iterator_iterator splice]``(
192 iterator position, this_type & x, iterator first, iterator last);
193
194 void ``[link reference_vector_of_remove_value remove]``(const value_type & value);
195
196 template< class Predicate >
197 void ``[link reference_vector_of_remove_if_predicate remove_if]``(Predicate pred);
198
199 void ``[link reference_vector_of_unique unique]``();
200
201 template< class BinaryPredicate >
202 void ``[link reference_vector_of_unique_predicate unique]``(BinaryPredicate binary_pred);
203
204 void ``[link reference_vector_of_merge_this merge]``(this_type & x);
205
206 template< typename Compare >
207 void ``[link reference_vector_of_merge_this_compare merge]``(this_type & x, Compare comp);
208
209 void ``[link reference_vector_of_sort sort]``();
210
211 template< typename Compare >
212 void ``[link reference_vector_of_sort_compare sort]``(Compare comp);
213
214 void ``[link reference_vector_of_reverse reverse]``();
215
216 // rearrange operations
217
218 void ``[link reference_vector_of_relocate_iterator_iterator relocate]``(iterator position, iterator i);
219 void ``[link reference_vector_of_relocate_iterator_iterator_iterator relocate]``(iterator position, iterator first, iterator last);
220 };
221
222 // view comparison
223
224 bool operator==(const this_type & v1, const this_type & v2 );
225 bool operator< (const this_type & v1, const this_type & v2 );
226 bool operator!=(const this_type & v1, const this_type & v2 );
227 bool operator> (const this_type & v1, const this_type & v2 );
228 bool operator>=(const this_type & v1, const this_type & v2 );
229 bool operator<=(const this_type & v1, const this_type & v2 );
230
231 } // namespace views
232 } // namespace bimap
233 } // namespace boost
234
235
236
237In the case of a `bimap< vector_of<Left>, ... >`
238
239In the set view:
240
241 typedef signature-compatible with relation< Left, ... > key_type;
242 typedef signature-compatible with relation< Left, ... > value_type;
243
244In the left map view:
245
246 typedef Left key_type;
247 typedef ... mapped_type;
248
249 typedef signature-compatible with std::pair< Left, ... > value_type;
250
251In the right map view:
252
253 typedef ... key_type;
254 typedef Left mapped_type;
255
256 typedef signature-compatible with std::pair< ... , Left > value_type;
257
258
259[#vector_of_complexity_signature]
260
261[section Complexity signature]
262
263Here and in the descriptions of operations of `vector_of` views, we adopt
264the scheme outlined in the
265[link complexity_signature_explanation complexity signature section].
266The complexity signature of `vector_of` view is:
267
268* copying: `c(n) = n * log(n)`,
269* insertion: `i(n) = 1` (amortized constant),
270* hinted insertion: `h(n) = 1` (amortized constant),
271* deletion: `d(n) = m`, where m is the distance from the deleted element to the
272end of the sequence,
273* replacement: `r(n) = 1` (constant),
274* modifying: `m(n) = 1` (constant).
275
276The following expressions are also used as a convenience for writing down some
277of the complexity formulas:
278
279[blurb
280`shl(a,b) = a+b` if a is nonzero, 0 otherwise.
281`rel(a,b,c) =` if `a<b`, `c-a`, else `a-b`,
282]
283
284(`shl` and `rel` stand for ['shift left] and ['relocate], respectively.)
285
286[endsect]
287
288[section Instantiation types]
289
290`vector_of` views are instantiated internally to `bimap` and specified
291by means of the collection type specifiers and the bimap itself.
292Instantiations are dependent on the following types:
293
294* `Value` from `vector_of`,
295* `Allocator` from `bimap`,
296
297[endsect]
298
299[section Constructors, copy and assignment]
300
301As explained in the views concepts section,
302views do not have public constructors or destructors.
303Assignment, on the other hand, is provided.
304
305 this_type & operator=(const this_type & x);
306
307* [*Effects: ] `a=b;`
308where a and b are the `bimap` objects to which `*this` and
309`x` belong, respectively.
310* [*Returns: ] `*this`.
311
312
313[#reference_vector_of_assign_iterator_iterator]
314
315 template< class InputIterator >
316 void assign(InputIterator first, InputIterator last);
317
318* [*Requires: ] `InputIterator` is a model of __SGI_INPUT_ITERATOR__ over elements
319of type `value_type` or a type convertible to `value_type`. `first` and `last` are
320not iterators into any view of the `bimap` to which this
321view belongs. `last` is reachable from `first`.
322* [*Effects: ] `clear(); insert(end(),first,last);`
323
324
325[#reference_vector_of_assign_size_value]
326
327 void assign(size_type n, const value_type & value);
328
329* [*Effects: ] `clear(); for(size_type i = 0; i < n; ++n) push_back(v);`
330
331[endsect]
332
333[section Capacity operations]
334
335[#reference_vector_of_capacity]
336
337 size_type capacity() const;
338
339* [*Returns:] The total number of elements `c` such that, when `size() < c`,
340back insertions happen in constant time (the general case as described by
341i(n) is ['amortized] constant time.)
342* [*Note:] Validity of iterators and references to elements is preserved
343in all insertions, regardless of the capacity status.
344
345
346[#reference_vector_of_reserve_size]
347
348 void reserve(size_type m);
349
350* [*Effects:] If the previous value of `capacity()` was greater than or equal
351to `m`, nothing is done; otherwise, the internal capacity is changed so that
352`capacity()>=m`.
353* [*Complexity:] If the capacity is not changed, constant; otherwise O(n).
354* [*Exception safety:] If the capacity is not changed, nothrow; otherwise, strong.
355
356
357[#reference_vector_of_resize_size_value]
358
359 void resize(size_type n, const value_type & x = value_type());
360
361* [*Effects: ] `if( n > size() ) insert(end(), n-size(), x);`
362`else if( n<size() ) erase(begin()+n,end());`
363* [*Note:] If an expansion is requested, the size of the view is not guaranteed
364to be n after this operation (other views may ban insertions.)
365
366
367[endsect]
368
369[section Modifiers]
370
371[#reference_vector_of_push_front_value]
372
373 std::pair<iterator,bool> push_front(const value_type & x);
374
375* [*Effects:] Inserts x at the beginning of the sequence if no other view
376of the `bimap` bans the insertion.
377* [*Returns:] The return value is a pair `p`. `p.second` is `true` if and only if
378insertion took place. On successful insertion, `p.first` points to the element
379inserted; otherwise, `p.first` points to an element that caused the insertion
380to be banned. Note that more than one element can be causing insertion not
381to be allowed.
382* [link vector_of_complexity_signature [*Complexity:]] O(n+I(n)).
383* [*Exception safety:] Strong.
384
385
386[#reference_vector_of_push_back_value]
387
388 std::pair<iterator,bool> push_back(const value_type & x);
389
390* [*Effects:] Inserts `x` at the end of the sequence if no other view of
391the `bimap` bans the insertion.
392* [*Returns:] The return value is a pair `p`. `p.second` is `true` if and only
393if insertion took place. On successful insertion, `p.first` points to the
394element inserted; otherwise, `p.first` points to an element that caused
395the insertion to be banned. Note that more than one element can be
396causing insertion not to be allowed.
397* [link vector_of_complexity_signature [*Complexity:]] O(I(n)).
398* [*Exception safety:] Strong.
399
400
401[#reference_vector_of_insert_iterator_value]
402
403 std::pair<iterator,bool> insert(iterator position, const value_type & x);
404
405* [*Requires: ] `position` is a valid iterator of the view.
406* [*Effects:] Inserts `x` before position if insertion is allowed by all
407other views of the `bimap`.
408* [*Returns:] The return value is a pair `p`. `p.second` is `true` if and only
409if insertion took place. On successful insertion, `p.first` points to the
410element inserted; otherwise, `p.first` points to an element that caused the
411insertion to be banned. Note that more than one element can be causing
412insertion not to be allowed.
413* [link vector_of_complexity_signature [*Complexity:]] O(shl(end()-position,1) + I(n)).
414* [*Exception safety:] Strong.
415
416
417[#reference_vector_of_insert_iterator_size_value]
418
419 void insert(iterator position, size_type m, const value_type & x);
420
421* [*Requires: ] `position` is a valid iterator of the view.
422* [*Effects: ] `for(size_type i = 0; i < m; ++i) insert(position, x);`
423* [link vector_of_complexity_signature
424[*Complexity:]] O(shl(end()-position,m) + m*I(n+m)).
425
426
427[#reference_vector_of_insert_iterator_iterator_iterator]
428
429 template< class InputIterator >
430 void insert(iterator position, InputIterator first, InputIterator last);
431
432* [*Requires: ] `position` is a valid iterator of the view. `InputIterator`
433is a model of __SGI_INPUT_ITERATOR__ over elements of type `value_type` or a type
434convertible to `value_type`. `first` and `last` are not iterators into any view
435of the `bimap` to which this view belongs. `last` is reachable
436from `first`.
437* [*Effects: ] `while(first!=last)insert(position,*first++);`
438* [link vector_of_complexity_signature
439[*Complexity:]] O(shl(end()-position,m) + m*I(n+m)), where m is the number
440of elements in `[first,last)`.
441* [*Exception safety:] Basic.
442
443
444[#reference_vector_of_erase_iterator]
445
446 iterator erase(iterator position);
447
448* [*Requires: ] `position` is a valid dereferenceable iterator of the view.
449* [*Effects:] Deletes the element pointed to by `position`.
450* [*Returns:] An iterator pointing to the element immediately following the
451one that was deleted, or `end()` if no such element exists.
452* [link vector_of_complexity_signature [*Complexity:]] O(D(n)).
453* [*Exception safety:] nothrow.
454
455
456[#reference_vector_of_erase_iterator_iterator]
457
458 iterator erase(iterator first, iterator last);
459
460* [*Requires: ] `[first,last)` is a valid range of the view.
461* [*Effects:] Deletes the elements in `[first,last)`.
462* [*Returns:] last.
463* [link vector_of_complexity_signature
464[*Complexity:]] O(m*D(n)), where m is the number of elements in `[first,last)`.
465* [*Exception safety:] nothrow.
466
467
468[#reference_vector_of_replace_iterator_value]
469
470 bool replace(iterator position, const value_type & x);
471
472* [*Requires: ] `position` is a valid dereferenceable iterator of the view.
473* [*Effects:] Assigns the value x to the element pointed to by position into
474the `bimap` to which the view belongs if replacing is allowed
475by all other views of the `bimap`.
476* [*Postconditions:] Validity of position is preserved in all cases.
477* [*Returns: ] `true` if the replacement took place, `false` otherwise.
478* [link vector_of_complexity_signature
479[*Complexity:]] O(R(n)).
480* [*Exception safety:] Strong. If an exception is thrown by some user-provided
481operation the `bimap` to which the view belongs remains in its
482original state.
483
484
485
486[#reference_vector_of_replace_key_iterator_key]
487
488 template< class CompatibleKey >
489 bool replace_key(iterator position, const CompatibleKey & x);
490
491* [*Requires: ] `position` is a valid dereferenceable iterator of the set view.
492`CompatibleKey` can be assigned to `key_type`.
493* [*Effects:] Assigns the value `x` to `e.first`, where `e` is the element pointed
494to by `position` into the `bimap` to which the set view belongs if replacing is allowed by
495all other views of the `bimap`.
496* [*Postconditions:] Validity of position is preserved in all cases.
497* [*Returns: ] `true` if the replacement took place, `false` otherwise.
498* [link vector_of_complexity_signature
499[*Complexity:]] O(R(n)).
500* [*Exception safety:] Strong. If an exception is thrown by some user-provided
501operation, the `bimap` to which the set view belongs remains in
502its original state.
503
504
505[#reference_vector_of_replace_data_iterator_data]
506
507 template< class CompatibleData >
508 bool replace_data(iterator position, const CompatibleData & x);
509
510* [*Requires: ] `position` is a valid dereferenceable iterator of the set view.
511`CompatibleKey` can be assigned to `mapped_type`.
512* [*Effects:] Assigns the value `x` to `e.second`, where `e` is the element pointed
513to by `position` into the `bimap` to which the set view belongs if replacing is allowed by
514all other views of the `bimap`.
515* [*Postconditions:] Validity of position is preserved in all cases.
516* [*Returns: ] `true` if the replacement took place, `false` otherwise.
517* [link vector_of_complexity_signature
518[*Complexity:]] O(R(n)).
519* [*Exception safety:] Strong. If an exception is thrown by some user-provided
520operation, the `bimap` to which the set view belongs remains in
521its original state.
522
523
524[#reference_vector_of_modify_key_iterator_modifier]
525
526 template< class KeyModifier >
527 bool modify_key(iterator position, KeyModifier mod);
528
529* [*Requires: ] `KeyModifier` is a model of __SGI_UNARY_FUNCTION__ accepting arguments of
530type: `key_type&`; `position` is a valid dereferenceable iterator of the view.
531* [*Effects:] Calls `mod(e.first)` where e is the element pointed to by position and
532rearranges `*position` into all the views of the `bimap`.
533If the rearrangement fails, the element is erased.
534It is successful if the rearrangement is allowed by all other views of the `bimap`.
535* [*Postconditions:] Validity of `position` is preserved if the operation succeeds.
536* [*Returns: ] `true` if the operation succeeded, `false` otherwise.
537* [link vector_of_complexity_signature
538[*Complexity:]] O(M(n)).
539* [*Exception safety:] Basic. If an exception is thrown by some user-provided
540operation (except possibly mod), then the element pointed to by position is erased.
541* [*Note:] Only provided for map views.
542
543
544[#reference_vector_of_modify_data_iterator_modifier]
545
546 template< class DataModifier >
547 bool modify_data(iterator position, DataModifier mod);
548
549* [*Requires: ] `DataModifier` is a model of __SGI_UNARY_FUNCTION__ accepting arguments of
550type: `mapped_type&`; `position` is a valid dereferenceable iterator of the view.
551* [*Effects:] Calls `mod(e.second)` where e is the element pointed to by position and
552rearranges `*position` into all the views of the `bimap`.
553If the rearrangement fails, the element is erased.
554It is successful if the rearrangement is allowed by all other views of the `bimap`.
555* [*Postconditions:] Validity of `position` is preserved if the operation succeeds.
556* [*Returns: ] `true` if the operation succeeded, `false` otherwise.
557* [link vector_of_complexity_signature
558[*Complexity:]] O(M(n)).
559* [*Exception safety:] Basic. If an exception is thrown by some user-provided
560operation (except possibly mod), then the element pointed to by position is erased.
561* [*Note:] Only provided for map views.
562
563[/
564[#reference_vector_of_modify_iterator_modifier]
565
566 template< class Modifier >
567 bool modify(iterator position, Modifier mod);
568
569* [*Requires: ] `Modifier` is a model of __SGI_BINARY_FUNCTION__ accepting arguments of
570type: `first_type&` and `second_type&` for ['Map View] or `left_type&` and `right_type&`
571for ['Set View]; `position` is a valid dereferenceable iterator of the view.
572* [*Effects:] Calls `mod(e.first,e.second)` for ['Map View:] or calls `mod(e.left,e.right)`
573for ['Set View] where e is the element pointed to by `position` and
574rearranges `*position` into all the views of the `bimap`.
575Rearrangement on `vector_of` views does not change the position of the
576element with respect to the view; rearrangement on other views may or
577might not suceed. If the rearrangement fails, the element is erased.
578* [*Postconditions:] Validity of `position` is preserved if the operation succeeds.
579* [*Returns: ] `true` if the operation succeeded, `false` otherwise.
580* [link vector_of_complexity_signature [*Complexity:]] O(M(n)).
581* [*Exception safety:] Basic. If an exception is thrown by some user-provided
582operation (except possibly `mod`), then the element pointed to by position
583is erased.
584]
585
586
587[endsect]
588
589[section List operations]
590
591`vector_of` views replicate the interface of `list_of` views, which
592in turn includes the list operations provided by `std::list`. The syntax and
593behavior of these operations exactly matches those of `list_of` views, but
594the associated complexity bounds differ in general.
595
596
597[#reference_vector_of_splice_iterator_this]
598
599 void splice(iterator position, this_type & x);
600
601* [*Requires: ] `position` is a valid iterator of the view. `&x!=this`.
602* [*Effects:] Inserts the contents of `x` before position, in the same order
603as they were in `x`. Those elements successfully inserted are erased from `x`.
604* [link vector_of_complexity_signature
605[*Complexity:]] O(shl(end()-position,x.size()) + x.size()*I(n+x.size()) + x.size()*D(x.size())).
606* [*Exception safety:] Basic.
607
608
609[#reference_vector_of_splice_iterator_this_iterator]
610
611 void splice(iterator position, this_type & x,iterator i);
612
613* [*Requires: ] `position` is a valid iterator of the view. `i` is a valid
614dereferenceable iterator `x`.
615* [*Effects:] Inserts the element pointed to by `i` before `position`: if
616insertion is successful, the element is erased from `x`. In the special
617case `&x==this`, no copy or deletion is performed, and the operation is
618always successful. If `position==i`, no operation is performed.
619* [*Postconditions:] If `&x==this`, no iterator or reference is invalidated.
620* [link vector_of_complexity_signature
621[*Complexity:]] If `&x==this`, O(rel(position,i,i+1));
622otherwise O(shl(end()-position,1) + I(n) + D(n)).
623* [*Exception safety:] If `&x==this`, nothrow; otherwise, strong.
624
625
626[#reference_vector_of_splice_iterator_this_iterator_iterator]
627
628 void splice(iterator position, this_type & x, iterator first, iterator last);
629
630* [*Requires: ] `position` is a valid iterator of the view. `first` and
631`last` are valid iterators of `x`. `last` is reachable from `first`. `position` is
632not in the range `[first,last)`.
633* [*Effects:] For each element in the range `[first,last)`, insertion is
634tried before `position`; if the operation is successful, the element is
635erased from `x`. In the special case `&x==this`, no copy or deletion is
636performed, and insertions are always successful.
637* [*Postconditions:] If `&x==this`, no iterator or reference is invalidated.
638* [link vector_of_complexity_signature
639[*Complexity:]] If `&x==this`, O(rel(position,first,last));
640otherwise O(shl(end()-position,m) + m*I(n+m) + m*D(x.size()))
641where m is the number of elements in `[first,last)`.
642* [*Exception safety:] If `&x==this`, nothrow; otherwise, basic.
643
644
645[#reference_vector_of_remove_value]
646
647 void remove(const value_type & value);
648
649* [*Effects:] Erases all elements of the view which compare equal to `value`.
650* [link vector_of_complexity_signature
651[*Complexity:]] O(n + m*D(n)), where m is the number of elements erased.
652* [*Exception safety:] Basic.
653
654
655[#reference_vector_of_remove_if_predicate]
656
657 template< class Predicate >
658 void remove_if(Predicate pred);
659
660* [*Effects:] Erases all elements `x` of the view for which `pred(x)` holds.
661* [link vector_of_complexity_signature
662[*Complexity:]] O(n + m*D(n)), where m is the number of elements erased.
663* [*Exception safety:] Basic.
664
665
666[#reference_vector_of_unique]
667
668 void unique();
669
670* [*Effects:] Eliminates all but the first element from every consecutive
671group of equal elements referred to by the iterator `i` in the range
672`[first+1,last)` for which `*i==*(i-1)`.
673* [link vector_of_complexity_signature
674[*Complexity:]] O(n + m*D(n)), where m is the number of elements erased.
675* [*Exception safety:] Basic.
676
677
678[#reference_vector_of_unique_predicate]
679
680 template< class BinaryPredicate >
681 void unique(BinaryPredicate binary_pred);
682
683* [*Effects:] Eliminates all but the first element from every consecutive
684group of elements referred to by the iterator i in the range `[first+1,last)`
685for which `binary_pred(*i, *(i-1))` holds.
686* [link vector_of_complexity_signature
687[*Complexity:]] O(n + m*D(n)), where m is the number of elements erased.
688* [*Exception safety:] Basic.
689
690
691[#reference_vector_of_merge_this]
692
693 void merge(this_type & x);
694
695* [*Requires: ] `std::less<value_type>` is a __SGI_STRICT_WEAK_ORDERING__ over
696`value_type`. Both the view and `x` are sorted according to `std::less<value_type>`.
697* [*Effects:] Attempts to insert every element of x into the corresponding
698position of the view (according to the order). Elements successfully
699inserted are erased from `x`. The resulting sequence is stable, i.e. equivalent
700elements of either container preserve their relative position. In the special
701case `&x==this`, no operation is performed.
702* [*Postconditions:] Elements in the view and remaining elements in `x` are
703sorted. Validity of iterators to the view and of non-erased elements of `x`
704references is preserved.
705* [link vector_of_complexity_signature
706[*Complexity:]] If `&x==this`, constant;
707otherwise O(n + x.size()*I(n+x.size()) + x.size()*D(x.size())).
708* [*Exception safety:] If `&x==this`, nothrow; otherwise, basic.
709
710
711[#reference_vector_of_merge_this_compare]
712
713 template< class Compare >
714 void merge(this_type & x, Compare comp);
715
716* [*Requires: ] `Compare` is a __SGI_STRICT_WEAK_ORDERING__ over `value_type`.
717Both the view and `x` are sorted according to comp.
718* [*Effects:] Attempts to insert every element of `x` into the corresponding
719position of the view (according to `comp`). Elements successfully inserted
720are erased from `x`. The resulting sequence is stable, i.e. equivalent
721elements of either container preserve their relative position. In the
722special case `&x==this`, no operation is performed.
723* [*Postconditions:] Elements in the view and remaining elements in `x` are
724sorted according to `comp`. Validity of iterators to the view and of
725non-erased elements of `x` references is preserved.
726* [link vector_of_complexity_signature
727[*Complexity:]] If `&x==this`, constant;
728otherwise O(n + x.size()*I(n+x.size()) + x.size()*D(x.size())).
729* [*Exception safety:] If `&x==this`, nothrow; otherwise, basic.
730
731
732[#reference_vector_of_sort]
733
734 void sort();
735
736* [*Requires: ] `std::less<value_type>` is a __SGI_STRICT_WEAK_ORDERING__ over `value_type`.
737* [*Effects:] Sorts the view according to `std::less<value_type>`.
738The sorting is stable, i.e. equivalent elements preserve their relative position.
739* [*Postconditions:] Validity of iterators and references is preserved.
740* [*Complexity:] O(n*log(n)).
741* [*Exception safety:] Basic.
742
743
744[#reference_vector_of_sort_compare]
745
746 template< class Compare >
747 void sort(Compare comp);
748
749* [*Requires:] Compare is a __SGI_STRICT_WEAK_ORDERING__ over `value_type`.
750* [*Effects:] Sorts the view according to `comp`. The sorting is stable, i.e.
751equivalent elements preserve their relative position.
752* [*Postconditions:] Validity of iterators and references is preserved.
753* [*Complexity:] O(n*log(n)).
754* [*Exception safety:] Basic.
755
756
757[#reference_vector_of_reverse]
758
759 void reverse();
760
761* [*Effects:] Reverses the order of the elements in the view.
762* [*Postconditions:] Validity of iterators and references is preserved.
763* [*Complexity:] O(n).
764* [*Exception safety:] nothrow.
765
766
767[endsect]
768
769[section Rearrange operations]
770
771These operations, without counterpart in `std::list` (although splice provides
772partially overlapping functionality), perform individual and global repositioning
773of elements inside the index.
774
775
776[#reference_vector_of_relocate_iterator_iterator]
777
778 void relocate(iterator position, iterator i);
779
780* [*Requires: ] `position` is a valid iterator of the view. `i` is a valid
781dereferenceable iterator of the view.
782* [*Effects:] Inserts the element pointed to by `i` before `position`.
783If `position==i`, no operation is performed.
784* [*Postconditions:] No iterator or reference is invalidated.
785* [*Complexity:] Constant.
786* [*Exception safety:] nothrow.
787
788
789[#reference_vector_of_relocate_iterator_iterator_iterator]
790
791 void relocate(iterator position, iterator first, iterator last);
792
793* [*Requires: ] `position` is a valid iterator of the view. `first` and `last` are
794valid iterators of the view. `last` is reachable from `first`. `position` is not
795in the range `[first,last)`.
796* [*Effects:] The range of elements `[first,last)` is repositioned just before
797`position`.
798* [*Postconditions:] No iterator or reference is invalidated.
799* [*Complexity:] Constant.
800* [*Exception safety:] nothrow.
801
802
803[endsect]
804
805
806[section Serialization]
807
808Views cannot be serialized on their own, but only as part of the `bimap`
809into which they are embedded. In describing the additional preconditions and guarantees
810associated to `vector_of` views with respect to serialization of their embedding
811containers, we use the concepts defined in the `bimap` serialization section.
812
813[blurb [*Operation:] saving of a `bimap` b to an output archive (XML archive) ar.]
814
815* [*Requires:] No additional requirements to those imposed by the container.
816
817
818[blurb [*Operation:] loading of a `bimap` b' from an input archive (XML archive) ar.]
819
820* [*Requires:] No additional requirements to those imposed by the container.
821* [*Postconditions:] On successful loading, each of the elements of `[begin(), end())` is a
822restored copy of the corresponding element in `[m.get<i>().begin(), m.get<i>().end())`,
823where `i` is the position of the `vector_of` view in the container.
824
825
826
827[blurb [*Operation:] saving of an `iterator` or `const_iterator` `it` to an output archive (XML archive) ar.]
828
829* [*Requires: ] `it` is a valid iterator of the view. The associated `bimap`
830has been previously saved.
831
832
833
834[blurb [*Operation:] loading of an `iterator` or `const_iterator` `it`' from an input archive (XML archive) ar.]
835
836* [*Postconditions:] On successful loading, if it was dereferenceable then `*it`' is the
837restored copy of `*it`, otherwise `it`'`==end()`.
838* [*Note:] It is allowed that it be a `const_iterator` and the restored `it`' an `iterator`,
839or viceversa.
840
841
842[endsect]
843[endsect]
844
845
846[endsect]