Explore potential for optimization in array::insert(Iter, InputIt, InputIt)
- Langage dominant
- C++
- Étoiles
- 479
- Forks
- 110
- Merge moyen
- 10 j 3 h
- PR mergées (30 j)
- 5
Description
The idea is this:
1. Fill the buffer up to capacity _at the end_ (needs a `revert_insert` protection).
2. Create a temporary buffer with the remaining elements (can throw).
3. If temporary buffer is not empty
1. Allocate new buffer with necessary size (can throw).
2. Relocate elements
* first original elements, up to insertion point,
* then new elements (at the end of the original buffer),
* then new elements from the temporary buffer,
* then remaining old elements.
4. If the temporary buffer is empty, rotate elements in the original buffer instead.
In the end result:
1. If the original capacity could accommodate the input range, then no new buffer (even a temporary one) is allocated. This is particularly useful when the caller uses input iterators, but does know the input range size, and thus can call `reserve`.
2. We should be able to keep the strong guarantee.
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.