Function std.range.primitives.popFrontN
popFrontN
eagerly advances r
itself (not a copy) up to n
times
(by calling r
). popFrontN
takes r
by ref
,
so it mutates the original range. Completes in Ο(1
) steps for ranges
that support slicing and have length.
Completes in Ο(n
) time for all other ranges.
size_t popFrontN(Range)
(
ref Range r,
size_t n
)
if (isInputRange!Range);
popBackN
behaves the same as popFrontN
but instead removes
elements from the back of the (bidirectional) range instead of the front.
Returns
How much r
was actually advanced, which may be less than n
if
r
did not have at least n
elements.
See Also
std
, std
Example
int[] a = [ 1, 2, 3, 4, 5 ];
a .popFrontN(2);
writeln(a); // [3, 4, 5]
a .popFrontN(7);
writeln(a); // []
Example
import std .algorithm .comparison : equal;
import std .range : iota;
auto LL = iota(1L, 7L);
auto r = popFrontN(LL, 2);
assert(equal(LL, [3L, 4L, 5L, 6L]));
writeln(r); // 2
Example
int[] a = [ 1, 2, 3, 4, 5 ];
a .popBackN(2);
writeln(a); // [1, 2, 3]
a .popBackN(7);
writeln(a); // []
Example
import std .algorithm .comparison : equal;
import std .range : iota;
auto LL = iota(1L, 7L);
auto r = popBackN(LL, 2);
assert(equal(LL, [1L, 2L, 3L, 4L]));
writeln(r); // 2
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.