Struct std::collections::LinkedList1.0.0[][src]

pub struct LinkedList<T> { /* fields omitted */ }
Expand description

具有所属节点的双向链表。

LinkedList 允许在恒定时间内在任一端推送和弹出元素。

NOTE: 使用 VecVecDeque 几乎总是更好,因为基于数组的容器通常更快,内存效率更高,并且可以更好地利用 CPU 缓存。

Implementations

创建一个空的 LinkedList

Examples

use std::collections::LinkedList;

let list: LinkedList<u32> = LinkedList::new();
Run

将所有元素从 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
🔬 This is a nightly-only experimental API. (linked_list_cursors #58533)

在前元素处提供游标。

如果列表为空,则游标指向 “ghost” 非元素。

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

在前面的元素上为游标提供编辑操作。

如果列表为空,则游标指向 “ghost” 非元素。

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

在 back 元素上提供游标。

如果列表为空,则游标指向 “ghost” 非元素。

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

在 back 元素上为游标提供编辑操作。

如果列表为空,则游标指向 “ghost” 非元素。

如果 LinkedList 为空,则返回 true

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

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();
assert!(dl.is_empty());

dl.push_front("foo");
assert!(!dl.is_empty());
Run

返回 LinkedList 的长度。

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

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();

dl.push_front(2);
assert_eq!(dl.len(), 1);

dl.push_front(1);
assert_eq!(dl.len(), 2);

dl.push_back(3);
assert_eq!(dl.len(), 3);
Run

LinkedList 删除所有元素。

此运算应在 O(n) 时间中计算。

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();

dl.push_front(2);
dl.push_front(1);
assert_eq!(dl.len(), 2);
assert_eq!(dl.front(), Some(&1));

dl.clear();
assert_eq!(dl.len(), 0);
assert_eq!(dl.front(), None);
Run

如果 LinkedList 包含等于给定值的元素,则返回 true

Examples

use std::collections::LinkedList;

let mut list: LinkedList<u32> = LinkedList::new();

list.push_back(0);
list.push_back(1);
list.push_back(2);

assert_eq!(list.contains(&0), true);
assert_eq!(list.contains(&10), false);
Run

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

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();
assert_eq!(dl.front(), None);

dl.push_front(1);
assert_eq!(dl.front(), Some(&1));
Run

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

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();
assert_eq!(dl.front(), None);

dl.push_front(1);
assert_eq!(dl.front(), Some(&1));

match dl.front_mut() {
    None => {},
    Some(x) => *x = 5,
}
assert_eq!(dl.front(), Some(&5));
Run

提供对 back 元素的引用,如果列表为空,则提供 None

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();
assert_eq!(dl.back(), None);

dl.push_back(1);
assert_eq!(dl.back(), Some(&1));
Run

提供对 back 元素的可变引用,如果列表为空,则为 None

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();
assert_eq!(dl.back(), None);

dl.push_back(1);
assert_eq!(dl.back(), Some(&1));

match dl.back_mut() {
    None => {},
    Some(x) => *x = 5,
}
assert_eq!(dl.back(), Some(&5));
Run

首先在列表中添加一个元素。

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

Examples

use std::collections::LinkedList;

let mut dl = LinkedList::new();

dl.push_front(2);
assert_eq!(dl.front().unwrap(), &2);

dl.push_front(1);
assert_eq!(dl.front().unwrap(), &1);
Run

删除第一个元素并返回它; 如果列表为空,则返回 None

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

Examples

use std::collections::LinkedList;

let mut d = LinkedList::new();
assert_eq!(d.pop_front(), None);

d.push_front(1);
d.push_front(3);
assert_eq!(d.pop_front(), Some(3));
assert_eq!(d.pop_front(), Some(1));
assert_eq!(d.pop_front(), None);
Run

将元素追加到列表的后面。

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

Examples

use std::collections::LinkedList;

let mut d = LinkedList::new();
d.push_back(1);
d.push_back(3);
assert_eq!(3, *d.back().unwrap());
Run

从列表中删除最后一个元素并返回它; 如果它为空,则返回 None

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

Examples

use std::collections::LinkedList;

let mut d = LinkedList::new();
assert_eq!(d.pop_back(), None);
d.push_back(1);
d.push_back(3);
assert_eq!(d.pop_back(), Some(3));
Run

在给定的索引处将列表分为两部分。 返回给定索引之后的所有内容,包括索引。

此运算应在 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
🔬 This is a nightly-only experimental API. (linked_list_remove #69210)

删除给定索引处的元素并返回它。

此运算应在 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
🔬 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

返回值的副本。 Read more

source 执行复制分配。 Read more

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

创建一个空的 LinkedList<T>

执行此类型的析构函数。 Read more

用迭代器的内容扩展集合。 Read more

🔬 This is a nightly-only experimental API. (extend_one #72631)

用一个元素扩展一个集合。

🔬 This is a nightly-only experimental API. (extend_one #72631)

在集合中为给定数量的附加元素保留容量。 Read more

用迭代器的内容扩展集合。 Read more

🔬 This is a nightly-only experimental API. (extend_one #72631)

用一个元素扩展一个集合。

🔬 This is a nightly-only experimental API. (extend_one #72631)

在集合中为给定数量的附加元素保留容量。 Read more

从迭代器创建一个值。 Read more

将该值输入给定的 HasherRead more

将这种类型的切片送入给定的 Hasher 中。 Read more

被迭代的元素的类型。

我们将其变成哪种迭代器?

从一个值创建一个迭代器。 Read more

被迭代的元素的类型。

我们将其变成哪种迭代器?

从一个值创建一个迭代器。 Read more

将列表消耗到迭代器中,该迭代器按值产生元素。

被迭代的元素的类型。

我们将其变成哪种迭代器?

此方法返回 selfother 之间的 OrderingRead more

比较并返回两个值中的最大值。 Read more

比较并返回两个值中的最小值。 Read more

将值限制为一定的时间间隔。 Read more

此方法测试 selfother 值是否相等,并由 == 使用。 Read more

此方法测试 !=

如果存在,则此方法返回 selfother 值之间的顺序。 Read more

此方法测试的内容少于 (对于 selfother),并且由 < 操作员使用。 Read more

此方法测试小于或等于 (对于 selfother),并且由 <= 运算符使用。 Read more

此方法测试大于 (对于 selfother),并且由 > 操作员使用。 Read more

此方法测试是否大于或等于 (对于 selfother),并且由 >= 运算符使用。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

获得所有权后的结果类型。

通常通过克隆从借用数据中创建拥有的数据。 Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into #41263)

recently added

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more

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

执行转换。

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

执行转换。