當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust VecDeque.make_contiguous用法及代碼示例


本文簡要介紹rust語言中 std::collections::VecDeque.make_contiguous 的用法。

用法

pub fn make_contiguous(&mut self) -> &mut [T]

重新排列此雙端隊列的內部存儲,使其成為一個連續的切片,然後返回。

此方法不分配也不改變插入元素的順序。由於它返回一個可變切片,因此可用於對雙端隊列進行排序。

一旦內部存儲連續, as_slices as_mut_slices 方法將在單個切片中返回VecDeque 的全部內容。

例子

對雙端隊列的內容進行排序。

use std::collections::VecDeque;

let mut buf = VecDeque::with_capacity(15);

buf.push_back(2);
buf.push_back(1);
buf.push_front(3);

// sorting the deque
buf.make_contiguous().sort();
assert_eq!(buf.as_slices(), (&[1, 2, 3] as &[_], &[] as &[_]));

// sorting it in reverse order
buf.make_contiguous().sort_by(|a, b| b.cmp(a));
assert_eq!(buf.as_slices(), (&[3, 2, 1] as &[_], &[] as &[_]));

獲得對連續切片的不可變訪問。

use std::collections::VecDeque;

let mut buf = VecDeque::new();

buf.push_back(2);
buf.push_back(1);
buf.push_front(3);

buf.make_contiguous();
if let (slice, &[]) = buf.as_slices() {
    // we can now be sure that `slice` contains all elements of the deque,
    // while still having immutable access to `buf`.
    assert_eq!(buf.len(), slice.len());
    assert_eq!(slice, &[3, 2, 1] as &[_]);
}

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::collections::VecDeque.make_contiguous。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。