pub struct CursorMut<'a, T: 'a, A: Allocator = Global> { /* private fields */ }
🔬This is a nightly-only experimental API. (linked_list_cursors #58533)
Expand description

带有编辑操作的 LinkedList 上的游标。

Cursor 类似于迭代器,不同之处在于它可以自由地来回查找,并且可以在迭代过程中安全地修改列表。 这是因为其产生的引用的生命周期与其自身的生命周期相关联,而不仅仅是底层列表。 这意味着游标不能一次产生多个元素。

游标始终位于列表中的两个元素之间,并以逻辑循环的方式进行索引。 为了适应这一点,有一个 “ghost” 非元素在列表的开头和结尾之间产生 None

Implementations§

source§

impl<'a, T, A: Allocator> CursorMut<'a, T, A>

source

pub fn index(&self) -> Option<usize>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

返回 LinkedList 中的游标位置索引。

如果游标当前指向 “ghost” 非元素,则返回 None

source

pub fn move_next(&mut self)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

将游标移动到 LinkedList 的下一个元素。

如果游标指向 “ghost” 非元素,那么它将移动到 LinkedList 的第一个元素。 如果它指向 LinkedList 的最后一个元素,那么它将把它移到 “ghost” 非元素。

source

pub fn move_prev(&mut self)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

将游标移动到 LinkedList 的上一个元素。

如果游标指向 “ghost” 非元素,那么它将移动到 LinkedList 的最后一个元素。 如果它指向 LinkedList 的第一个元素,那么它将把它移到 “ghost” 非元素。

source

pub fn current(&mut self) -> Option<&mut T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

返回对游标当前指向的元素的引用。

如果游标当前指向 “ghost” 非元素,则返回 None

source

pub fn peek_next(&mut self) -> Option<&mut T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

返回下一个元素的引用。

如果游标指向 “ghost” 非元素,则返回 LinkedList 的第一个元素。 如果它指向 LinkedList 的最后一个元素,则返回 None

source

pub fn peek_prev(&mut self) -> Option<&mut T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

返回上一个元素的引用。

如果游标指向 “ghost” 非元素,则返回 LinkedList 的最后一个元素。 如果它指向 LinkedList 的第一个元素,则返回 None

source

pub fn as_cursor(&self) -> Cursor<'_, T, A>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

返回指向当前元素的只读游标。

返回的 Cursor 的生命周期与 CursorMut 的生命周期绑定在一起,这意味着它不能超过 CursorMut 的生命周期,并且 CursorMut 被冻结为 Cursor 的生命周期。

source§

impl<'a, T> CursorMut<'a, T>

source

pub fn splice_after(&mut self, list: LinkedList<T>)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

将给定 LinkedList 中的元素插入当前元素之后。

如果游标指向 “ghost” 非元素,则新元素将插入 LinkedList 的开头。

source

pub fn splice_before(&mut self, list: LinkedList<T>)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

将给定 LinkedList 中的元素插入到当前元素之前。

如果游标指向 “ghost” 非元素,则新元素将插入 LinkedList 的末尾。

source§

impl<'a, T, A: Allocator> CursorMut<'a, T, A>

source

pub fn insert_after(&mut self, item: T)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

在当前元素之后将新元素插入 LinkedList

如果游标指向 “ghost” 非元素,则将新元素插入 LinkedList 的前面。

source

pub fn insert_before(&mut self, item: T)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

在当前元素之前在 LinkedList 中插入一个新元素。

如果游标指向 “ghost” 非元素,则将新元素插入 LinkedList 的末尾。

source

pub fn remove_current(&mut self) -> Option<T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

LinkedList 中删除当前元素。

返回已删除的元素,并移动游标以指向 LinkedList 中的下一个元素。

如果游标当前指向 “ghost” 非元素,则不删除任何元素,并返回 None

source

pub fn remove_current_as_list(&mut self) -> Option<LinkedList<T, A>>where A: Clone,

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

在不释放列表节点的情况下从 LinkedList 中删除当前元素。

被删除的节点作为仅包含该节点的新 LinkedList 返回。 游标将移至当前 LinkedList 中的下一个元素。

如果游标当前指向 “ghost” 非元素,则不删除任何元素,并返回 None

source

pub fn split_after(&mut self) -> LinkedList<T, A>where A: Clone,

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

在当前元素之后将列表分为两部分。 这将返回一个新列表,其中包含游标之后的所有内容,而原始列表将保留之前的所有内容。

如果游标指向 “ghost” 非元素,那么将移动 LinkedList 的全部内容。

source

pub fn split_before(&mut self) -> LinkedList<T, A>where A: Clone,

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

在当前元素之前将列表分为两部分。 这将返回一个新列表,该列表包含游标之前的所有内容,而原始列表保留之后的所有内容。

如果游标指向 “ghost” 非元素,那么将移动 LinkedList 的全部内容。

source

pub fn push_front(&mut self, elt: T)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

将一个元素追加到游标的父列表的前面。 游标指向的节点不变,即使是 “ghost” 节点。

此运算应在 O(1) 时间中进行计算。

source

pub fn push_back(&mut self, elt: T)

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

将一个元素追加到游标父列表的后面。 游标指向的节点不变,即使是 “ghost” 节点。

此运算应在 O(1) 时间中进行计算。

source

pub fn pop_front(&mut self) -> Option<T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

从游标的父列表中删除第一个元素并返回它,如果列表为空,则返回 None。 游标指向的元素保持不变,除非它指向前面的元素。 在这种情况下,它指向新的前端元素。

此运算应在 O(1) 时间中进行计算。

source

pub fn pop_back(&mut self) -> Option<T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

从游标的父列表中删除最后一个元素并返回它,如果列表为空,则返回 None。 游标指向的元素保持不变,除非它指向后面的元素。 在这种情况下,它指向 “ghost” 元素。

此运算应在 O(1) 时间中进行计算。

source

pub fn front(&self) -> Option<&T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

提供对游标父列表前元素的引用,如果列表为空,则为 None。

source

pub fn front_mut(&mut self) -> Option<&mut T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

提供对光标父列表的前元素的可变引用,如果列表为空,则为 None。

source

pub fn back(&self) -> Option<&T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

提供对游标父列表的后部元素的引用,如果列表为空,则为 None。

source

pub fn back_mut(&mut self) -> Option<&mut T>

🔬This is a nightly-only experimental API. (linked_list_cursors #58533)

提供一个循环引用来返回游标的父列表的元素,如果列表为空,则提供 None

Examples

使用游标构建和可变列表,然后获取返回元素:

#![feature(linked_list_cursors)]
use std::collections::LinkedList;
let mut dl = LinkedList::new();
dl.push_front(3);
dl.push_front(2);
dl.push_front(1);
let mut cursor = dl.cursor_front_mut();
*cursor.current().unwrap() = 99;
*cursor.back_mut().unwrap() = 0;
let mut contents = dl.into_iter();
assert_eq!(contents.next(), Some(99));
assert_eq!(contents.next(), Some(2));
assert_eq!(contents.next(), Some(0));
assert_eq!(contents.next(), None);
Run

Trait Implementations§

source§

impl<T: Debug, A: Allocator> Debug for CursorMut<'_, T, A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
source§

impl<T: Send, A: Allocator + Send> Send for CursorMut<'_, T, A>

source§

impl<T: Sync, A: Allocator + Sync> Sync for CursorMut<'_, T, A>

Auto Trait Implementations§

§

impl<'a, T, A> RefUnwindSafe for CursorMut<'a, T, A>where A: RefUnwindSafe, T: RefUnwindSafe,

§

impl<'a, T, A> Unpin for CursorMut<'a, T, A>

§

impl<'a, T, A = Global> !UnwindSafe for CursorMut<'a, T, A>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。