Add back(), pop_back() and remove_back() to LocalVector, for stack-like access
#114798
+24
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
back()andpop_back()toLocalVector#99955This adds back access to
LocalVector, so that it can be efficiently used as a stack.The current prevalent class for stack-like containers is
List, which is very inefficient.In draft until it's actually needed.
Discussion
I added an access method
back()(const and non-const form), which returns a reference to the last element. This can be error prone if called when the vector is empty. In this case, we can do naught but crash.An alternative would be returning an optional, but that would (slightly) increase the cost of the call too.
pop_backinListreturns no element. This can lead to inefficient code, because elements have to be copied out of theListon pop.Instead, I return the element (moved out of the list), like other languages (eg Rust and Python). This can lead to much more efficient code.
However, this can still be inefficient if the element need only be removed without fetching it. For this case,
remove_backis added. Practically, this may not be needed because after inlining,pop_backmight be optimized to the same standard asremove_back.