【问题标题】:Is there an equivalent macro for linked list like vec! in Rust是否有类似 vec 的链表的等效宏!在锈
【发布时间】:2021-08-12 21:25:18
【问题描述】:

所以为了方便初始化向量,这里有 vec!宏。

let mut vec_of_zeroes: Vec<usize> = vec![0;10];

我想知道是否也有一个简单的标准宏来初始化链表?

use std::collections::LinkedList;

let mut list_of_zeroes: LinkedList<usize> = /*macro here?*/;

如果没有,不用担心。谢谢你的时间。

【问题讨论】:

  • let list_of_zeroes: LinkedList&lt;usize&gt; = [1usize, 2, 3, 4, 5].iter().copied().collect();

标签: rust linked-list macros


【解决方案1】:

不,标准库中没有这样的宏。事实上,没有任何其他数据结构的类似宏,even HashMap / BTreeMap, which are much more frequently used

但是,crate velcro 提供了一个 linked_list! 宏,可以满足您的需求(并具有一些其他简洁的功能)。

请注意,std::collections::LinkedList 缺少一些使链表具有吸引力的特性——例如,没有基于光标的 API。在大多数情况下,您应该改用VecVecDeque

【讨论】:

    【解决方案2】:

    没有链表宏,但你可以使用.extend() 方法来实现类似的东西:

    use std::collections::LinkedList;
    
    fn main() {
        let mut a: LinkedList<u32> = LinkedList::new();
        
        a.extend(&[0; 10]);
        
        println!("{:?}", a);
    }
    

    Playground

    如果您想进行单行初始化,您可以使用 cmets 中 @Stargateur 建议的其他一些迭代器方法。如果出于某种原因需要,此方法还允许变量是不可变的。

    use std::collections::LinkedList;
    
    fn main() {
        let a: LinkedList<u32> = [0; 10].iter().copied().collect();
        
        println!("{:?}", a);
    }
    

    Playground

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 2011-04-24
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      相关资源
      最近更新 更多