小编jam*_*ier的帖子

如何创建一个大小有限的VecDeque?

我想实现一个VecDeque具有最大大小限制的。我有两个策略,但我都无法完成。

第一种方法:组合继承。

我创建了一个新结构:

pub struct LimVecDeque<T> {                                                                                                    
     deque: VecDeque<T>,                                                 
     limit: usize,                                                       
}

Run Code Online (Sandbox Code Playgroud)

并创建一个新的推送函数:

impl<T> LimVecDeque<T> {
  ...

  pub fn push (&self, elem: T) {
    self.deque.push_back(elem);
    if self.limit < self.deque.len() {
      self.deque.pop_front();
    }
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

这是可行的,但是随着我的程序的成长,我需要向我的LimVecDeque结构添加功能。其中大部分是原件的副本VecDeque

pub fn len(&self) -> usize {
  self.deque.len()
}
Run Code Online (Sandbox Code Playgroud)

我还有更多问题需要导出VecDeque::iter()。我在类型和迭代器方面遇到了问题(我还不太擅长迭代器)。这种方法迫使我将每个函数克隆/导出VecDequeLimVecDeque. 大量的工作!

第二种方法:创建一个新特征并实施VecDeque

trait Limited {
  type Elem;

  pub fn push_bounded(&self, limit: usize, elem: Elem);
}
Run Code Online (Sandbox Code Playgroud)

然后再实现 的特征VecDeque。 …

collections deque rust

5
推荐指数
1
解决办法
1555
查看次数

标签 统计

collections ×1

deque ×1

rust ×1