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()}
}
}
Rust 为结构体定义方法与构造函数
最新推荐文章于 2024-08-26 09:44:07 发布