fork download
  1. use std::ops::{Deref, DerefMut, Index, IndexMut};
  2.  
  3. #[derive(Debug)]
  4. struct MyVec<T>(Vec<T>);
  5.  
  6. impl<T> Deref for MyVec<T> {
  7. type Target = Vec<T>;
  8. fn deref(&self) -> &Vec<T> {
  9. &self.0
  10. }
  11. }
  12.  
  13. impl<T> DerefMut for MyVec<T> {
  14. fn deref_mut(&mut self) -> &mut Vec<T> {
  15. &mut self.0
  16. }
  17. }
  18.  
  19. impl<T> Index<i32> for MyVec<T> {
  20. type Output = T;
  21. fn index(&self, index: i32) -> &T {
  22. &self.0[index as usize]
  23. }
  24. }
  25.  
  26. impl<T> IndexMut<i32> for MyVec<T> {
  27. fn index_mut(&mut self, index: i32) -> &mut T {
  28. &mut self.0[index as usize]
  29. }
  30. }
  31.  
  32. fn main() {
  33. let mut v = MyVec(Vec::<i32>::new());
  34.  
  35. v.push(10);
  36. v.push(20);
  37. println!("{:?}", v);
  38. for i in v.iter() {
  39. println!("{}", i);
  40. }
  41.  
  42. v.pop();
  43. println!("{:?}", v);
  44. for i in v.iter() {
  45. println!("{}", i);
  46. }
  47.  
  48. v.push(30);
  49. let mut i :i32 = 0;
  50. v[i] = -78;
  51. println!("{:?}", v);
  52. while i < v.len() as i32 {
  53. println!("{}", v[i]);
  54. i += 1;
  55. }
  56. }
Success #stdin #stdout 0s 4444KB
stdin
Standard input is empty
stdout
MyVec([10, 20])
10
20
MyVec([10])
10
MyVec([-78, 30])
-78
30