Skip to content

Commit 52d806a

Browse files
committed
extract_if's sample equivalent now really equivalent.
Simpler predicate. Compare sample code output to that of the library function.
1 parent ab62d56 commit 52d806a

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

library/alloc/src/vec/mod.rs

+12-6
Original file line numberDiff line numberDiff line change
@@ -3666,21 +3666,27 @@ impl<T, A: Allocator> Vec<T, A> {
36663666
/// Using this method is equivalent to the following code:
36673667
///
36683668
/// ```
3669-
/// # use std::cmp::min;
3670-
/// # let some_predicate = |x: &mut i32| { *x == 2 || *x == 3 || *x == 6 };
3671-
/// # let mut vec = vec![1, 2, 3, 4, 5, 6];
3672-
/// # let range = 1..4;
3669+
/// # let some_predicate = |x: &mut i32| { *x % 2 == 1 };
3670+
/// # let mut vec = vec![0, 1, 2, 3, 4, 5, 6];
3671+
/// # let mut vec2 = vec.clone();
3672+
/// # let range = 1..5;
36733673
/// let mut i = range.start;
3674-
/// while i < min(vec.len(), range.end) {
3674+
/// let end_items = vec.len() - range.end;
3675+
/// # let mut extracted = vec![];
3676+
///
3677+
/// while i < vec.len() - end_items {
36753678
/// if some_predicate(&mut vec[i]) {
36763679
/// let val = vec.remove(i);
3680+
/// # extracted.push(val);
36773681
/// // your code here
36783682
/// } else {
36793683
/// i += 1;
36803684
/// }
36813685
/// }
36823686
///
3683-
/// # assert_eq!(vec, vec![1, 4, 5]);
3687+
/// # let extracted2: Vec<_> = vec2.extract_if(range, some_predicate).collect();
3688+
/// # assert_eq!(vec, vec2);
3689+
/// # assert_eq!(extracted, extracted2);
36843690
/// ```
36853691
///
36863692
/// But `extract_if` is easier to use. `extract_if` is also more efficient,

0 commit comments

Comments
 (0)