Struct std::collections::linked_list::LinkedList 1.0.0[−][src]
pub struct LinkedList<T> { /* fields omitted */ }
Expand description
具有所属节点的双向链表。
LinkedList
允许在恒定时间内在任一端推送和弹出元素。
NOTE: 使用 Vec
或 VecDeque
几乎总是更好,因为基于数组的容器通常更快,内存效率更高,并且可以更好地利用 CPU 缓存。
Implementations
将所有元素从 other
移动到列表的末尾。
这将重用 other
中的所有节点并将它们移到 self
中。
完成此操作后,other
变为空。
此操作应在 O(1) 时间和 O(1) 内存中进行计算。
Examples
use std::collections::LinkedList; let mut list1 = LinkedList::new(); list1.push_back('a'); let mut list2 = LinkedList::new(); list2.push_back('b'); list2.push_back('c'); list1.append(&mut list2); let mut iter = list1.iter(); assert_eq!(iter.next(), Some(&'a')); assert_eq!(iter.next(), Some(&'b')); assert_eq!(iter.next(), Some(&'c')); assert!(iter.next().is_none()); assert!(list2.is_empty());Run
提供一个正向迭代器。
Examples
use std::collections::LinkedList; let mut list: LinkedList<u32> = LinkedList::new(); list.push_back(0); list.push_back(1); list.push_back(2); let mut iter = list.iter(); assert_eq!(iter.next(), Some(&0)); assert_eq!(iter.next(), Some(&1)); assert_eq!(iter.next(), Some(&2)); assert_eq!(iter.next(), None);Run
提供具有可变引用的正向迭代器。
Examples
use std::collections::LinkedList; let mut list: LinkedList<u32> = LinkedList::new(); list.push_back(0); list.push_back(1); list.push_back(2); for element in list.iter_mut() { *element += 10; } let mut iter = list.iter(); assert_eq!(iter.next(), Some(&10)); assert_eq!(iter.next(), Some(&11)); assert_eq!(iter.next(), Some(&12)); assert_eq!(iter.next(), None);Run
在前元素处提供游标。
如果列表为空,则游标指向 “ghost” 非元素。
在前面的元素上为游标提供编辑操作。
如果列表为空,则游标指向 “ghost” 非元素。
在 back 元素上提供游标。
如果列表为空,则游标指向 “ghost” 非元素。
在 back 元素上为游标提供编辑操作。
如果列表为空,则游标指向 “ghost” 非元素。
在给定的索引处将列表分为两部分。 返回给定索引之后的所有内容,包括索引。
此运算应在 O(n) 时间中计算。
Panics
如果为 at > len
,则为 Panics。
Examples
use std::collections::LinkedList; let mut d = LinkedList::new(); d.push_front(1); d.push_front(2); d.push_front(3); let mut split = d.split_off(2); assert_eq!(split.pop_front(), Some(1)); assert_eq!(split.pop_front(), None);Run
删除给定索引处的元素并返回它。
此运算应在 O(n) 时间中计算。
Panics
如果 >= len 则 Panics
Examples
#![feature(linked_list_remove)] use std::collections::LinkedList; let mut d = LinkedList::new(); d.push_front(1); d.push_front(2); d.push_front(3); assert_eq!(d.remove(1), 2); assert_eq!(d.remove(0), 3); assert_eq!(d.remove(0), 1);Run
pub fn drain_filter<F>(&mut self, filter: F) -> DrainFilter<'_, T, F>ⓘNotable traits for DrainFilter<'_, T, F>impl<'_, T, F> Iterator for DrainFilter<'_, T, F> where
F: FnMut(&mut T) -> bool, type Item = T;
where
F: FnMut(&mut T) -> bool,
[src]🔬 This is a nightly-only experimental API. (drain_filter
#43244)
recently added
pub fn drain_filter<F>(&mut self, filter: F) -> DrainFilter<'_, T, F>ⓘNotable traits for DrainFilter<'_, T, F>impl<'_, T, F> Iterator for DrainFilter<'_, T, F> where
F: FnMut(&mut T) -> bool, type Item = T;
where
F: FnMut(&mut T) -> bool,
[src]impl<'_, T, F> Iterator for DrainFilter<'_, T, F> where
F: FnMut(&mut T) -> bool, type Item = T;
🔬 This is a nightly-only experimental API. (drain_filter
#43244)
recently added
创建一个迭代器,该迭代器使用闭包确定是否应删除元素。
如果闭包返回 true,那么将删除并屈服该元素。 如果闭包返回 false,则该元素将保留在列表中,并且不会由迭代器产生。
请注意,无论选择保留还是删除 drain_filter
,您都可以对过滤器闭包中的每个元素进行可变的。
Examples
将列表分成偶数和几率,重新使用原始列表:
#![feature(drain_filter)] use std::collections::LinkedList; let mut numbers: LinkedList<u32> = LinkedList::new(); numbers.extend(&[1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15]); let evens = numbers.drain_filter(|x| *x % 2 == 0).collect::<LinkedList<_>>(); let odds = numbers; assert_eq!(evens.into_iter().collect::<Vec<_>>(), vec![2, 4, 6, 8, 14]); assert_eq!(odds.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 9, 11, 13, 15]);Run
Trait Implementations
创建一个空的 LinkedList<T>
。
从迭代器创建一个值。 Read more
此方法测试 self
和 other
值是否相等,并由 ==
使用。 Read more
此方法测试 !=
。