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

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

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

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

NOTE: 使用 Vec 或 VecDeque 几乎总是更好,因为基于数组的容器通常更快,内存效率更高,并且可以更好地利用 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

将该值输入给定的 Hasher。 Read more

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

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

被迭代的元素的类型。

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

被迭代的元素的类型。

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

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

被迭代的元素的类型。

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

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

此方法返回 self 和 other 之间的 Ordering。 Read more

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

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

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

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

此方法测试 !=。

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

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

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

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

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

Auto Trait Implementations

Blanket Implementations

获取 self 的 TypeId。 Read more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

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

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

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

recently added

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

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

执行转换。

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

执行转换。