Skip to content

Commit 8892baa

Browse files
committed
std: optimize the example of as_slices and as_mut_slices
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
1 parent 25f33b9 commit 8892baa

File tree

1 file changed

+27
-15
lines changed
  • library/alloc/src/collections/vec_deque

1 file changed

+27
-15
lines changed

library/alloc/src/collections/vec_deque/mod.rs

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,14 +1328,18 @@ impl<T, A: Allocator> VecDeque<T, A> {
13281328
/// deque.push_back(1);
13291329
/// deque.push_back(2);
13301330
///
1331-
/// let slices = deque.as_slices();
1332-
/// assert!(slices.0.iter().chain(slices.1.iter()).eq([0, 1, 2].iter()));
1331+
/// let expected = [0, 1, 2];
1332+
/// let (front, back) = deque.as_slices();
1333+
/// assert_eq!(&expected[..front.len()], front);
1334+
/// assert_eq!(&expected[front.len()..], back);
13331335
///
13341336
/// deque.push_front(10);
13351337
/// deque.push_front(9);
13361338
///
1337-
/// let slices = deque.as_slices();
1338-
/// assert!(slices.0.iter().chain(slices.1.iter()).eq([9, 10, 0, 1, 2].iter()));
1339+
/// let expected = [9, 10, 0, 1, 2];
1340+
/// let (front, back) = deque.as_slices();
1341+
/// assert_eq!(&expected[..front.len()], front);
1342+
/// assert_eq!(&expected[front.len()..], back);
13391343
/// ```
13401344
#[inline]
13411345
#[stable(feature = "deque_extras_15", since = "1.5.0")]
@@ -1363,20 +1367,28 @@ impl<T, A: Allocator> VecDeque<T, A> {
13631367
///
13641368
/// let mut deque = VecDeque::new();
13651369
///
1370+
/// deque.push_back(0);
13661371
/// deque.push_back(1);
1367-
/// deque.push_back(2);
1368-
/// deque.push_back(3);
1369-
/// deque.push_back(4);
13701372
///
1371-
/// let (front, back) = deque.as_mut_slices();
1373+
/// deque.push_front(10);
1374+
/// deque.push_front(9);
13721375
///
1373-
/// if !front.is_empty() {
1374-
/// front[0] = 5;
1375-
/// assert_eq!(deque[0], 5);
1376-
/// } else {
1377-
/// back[back.len() - 1] = 5;
1378-
/// assert_eq!(deque[deque.len() - 1], 5);
1379-
/// }
1376+
/// // Since the split point is not guaranteed, we may need to update
1377+
/// // either slice.
1378+
/// let mut update_nth = |index: usize, val: u32| {
1379+
/// let (front, back) = deque.as_mut_slices();
1380+
/// if index > front.len() - 1 {
1381+
/// back[index - front.len()] = val;
1382+
/// } else {
1383+
/// front[index] = val;
1384+
/// }
1385+
/// };
1386+
///
1387+
/// update_nth(0, 42);
1388+
/// update_nth(2, 24);
1389+
///
1390+
/// let v: Vec<_> = deque.into();
1391+
/// assert_eq!(v, [42, 10, 24, 1]);
13801392
/// ```
13811393
#[inline]
13821394
#[stable(feature = "deque_extras_15", since = "1.5.0")]

0 commit comments

Comments
 (0)