Rust 为结构体定义方法与构造函数

26 篇文章 0 订阅
fn main() {
   
    let mut my_queue = Queue::new();
    my_queue.push('A');
    my_queue.push('B');

    for i in 0..5{
        my_queue.push('C');
    }
    println!("{:#?}",my_queue);
    let mut my_queue_2 = my_queue.clone();
    my_queue_2.push('E');
    my_queue_2.pop();
    my_queue_2.pop();

    let (v1,v2) = my_queue_2.split();
    println!("{:?}\n{:?}",v1,v2);
    // println!("{:#?}",my_queue_2);



}
#[derive(Debug,Clone)]
pub struct Queue{
    older: Vec<char>,   //旧元素,最老的在后面
    younger: Vec<char>  // 新元素,最新的在后面
}
 impl Queue{
// 需要对这个实例进行修改,所以有使用&mut self
     pub fn push(&mut self, c:char){
         self.younger.push(c);
     }
// 需要对这个实例进行修改,所以有使用&mut self
     pub fn pop(&mut self) -> Option<char>{
         if self.older.is_empty(){
             if self.younger.is_empty(){
                 return None;
             }
        use std::mem::swap;
        swap(&mut self.older, &mut self.younger);
        self.older.reverse();
        }
        self.older.pop() 
     }
// 如果不用对这个实例进行修改,可用&self
     pub fn is_empty(&self)->bool{
         self.older.is_empty() && self.younger.is_empty()
     }
/// 不加& 或者&mut 则直接取得该实例的所有权,调用该方法后再不能再访问这个变量
     pub fn split(self) -> (Vec<char>,Vec<char>){
         (self.older, self.younger)
     }
    /// 定义构造函数
    /// 使用 Queue::new()获取
     pub fn new() -> Queue{
         Queue{older:Vec::new(),younger:Vec::new()}
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值