mirror of
https://github.com/rust-lang/rustlings.git
synced 2026-01-12 21:59:18 +00:00
adding completed excercises for move semantics and vecs
This commit is contained in:
parent
f1145acb06
commit
0d1db97a93
@ -1,12 +1,11 @@
|
|||||||
// move_semantics1.rs
|
// move_semantics1.rs
|
||||||
// Execute `rustlings hint move_semantics1` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint move_semantics1` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = Vec::new();
|
let vec0 = Vec::new();
|
||||||
|
|
||||||
let vec1 = fill_vec(vec0);
|
let mut vec1 = fill_vec(vec0);
|
||||||
|
|
||||||
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
|
|
||||||
|
|||||||
@ -2,12 +2,11 @@
|
|||||||
// Make me compile without changing line 13 or moving line 10!
|
// Make me compile without changing line 13 or moving line 10!
|
||||||
// Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = Vec::new();
|
let vec0 = Vec::new();
|
||||||
|
|
||||||
let mut vec1 = fill_vec(vec0);
|
let mut vec1 = fill_vec(vec0.clone());
|
||||||
|
|
||||||
// Do not change the following line!
|
// Do not change the following line!
|
||||||
println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
|
println!("{} has length {} content `{:?}`", "vec0", vec0.len(), vec0);
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
// (no lines with multiple semicolons necessary!)
|
// (no lines with multiple semicolons necessary!)
|
||||||
// Execute `rustlings hint move_semantics3` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint move_semantics3` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = Vec::new();
|
let vec0 = Vec::new();
|
||||||
@ -17,7 +16,7 @@ fn main() {
|
|||||||
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
|
fn fill_vec(mut vec: Vec<i32>) -> Vec<i32> {
|
||||||
vec.push(22);
|
vec.push(22);
|
||||||
vec.push(44);
|
vec.push(44);
|
||||||
vec.push(66);
|
vec.push(66);
|
||||||
|
|||||||
@ -4,12 +4,9 @@
|
|||||||
// function.
|
// function.
|
||||||
// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint move_semantics4` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let vec0 = Vec::new();
|
let mut vec1 = fill_vec();
|
||||||
|
|
||||||
let mut vec1 = fill_vec(vec0);
|
|
||||||
|
|
||||||
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
|
|
||||||
@ -18,9 +15,8 @@ fn main() {
|
|||||||
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// `fill_vec()` no longer takes `vec: Vec<i32>` as argument
|
|
||||||
fn fill_vec() -> Vec<i32> {
|
fn fill_vec() -> Vec<i32> {
|
||||||
let mut vec = vec;
|
let mut vec = Vec::new();
|
||||||
|
|
||||||
vec.push(22);
|
vec.push(22);
|
||||||
vec.push(44);
|
vec.push(44);
|
||||||
|
|||||||
@ -3,13 +3,12 @@
|
|||||||
// adding, changing or removing any of them.
|
// adding, changing or removing any of them.
|
||||||
// Execute `rustlings hint move_semantics5` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint move_semantics5` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut x = 100;
|
let mut x = 100;
|
||||||
let y = &mut x;
|
let y = &mut x;
|
||||||
let z = &mut x;
|
|
||||||
*y += 100;
|
*y += 100;
|
||||||
|
let z = &mut x;
|
||||||
*z += 1000;
|
*z += 1000;
|
||||||
|
|
||||||
assert_eq!(x, 1200);
|
assert_eq!(x, 1200);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,14 +2,12 @@
|
|||||||
// Execute `rustlings hint move_semantics6` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint move_semantics6` or use the `hint` watch subcommand for a hint.
|
||||||
// You can't change anything except adding or removing references.
|
// You can't change anything except adding or removing references.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let data = "Rust is great!".to_string();
|
let data = "Rust is great!".to_string();
|
||||||
|
|
||||||
get_char(data);
|
get_char(data.clone());
|
||||||
|
|
||||||
string_uppercase(&data);
|
string_uppercase(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should not take ownership
|
// Should not take ownership
|
||||||
@ -18,8 +16,8 @@ fn get_char(data: String) -> char {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Should take ownership
|
// Should take ownership
|
||||||
fn string_uppercase(mut data: &String) {
|
fn string_uppercase(mut data: String) {
|
||||||
data = &data.to_uppercase();
|
data = data.to_uppercase();
|
||||||
|
|
||||||
println!("{}", data);
|
println!("{}", data);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
//
|
//
|
||||||
// Execute `rustlings hint vecs2` or use the `hint` watch subcommand for a hint.
|
// Execute `rustlings hint vecs2` or use the `hint` watch subcommand for a hint.
|
||||||
|
|
||||||
// I AM NOT DONE
|
|
||||||
|
|
||||||
fn vec_loop(mut v: Vec<i32>) -> Vec<i32> {
|
fn vec_loop(mut v: Vec<i32>) -> Vec<i32> {
|
||||||
for i in v.iter_mut() {
|
for i in v.iter_mut() {
|
||||||
@ -18,11 +17,15 @@ fn vec_loop(mut v: Vec<i32>) -> Vec<i32> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn vec_map(v: &Vec<i32>) -> Vec<i32> {
|
fn vec_map(v: &Vec<i32>) -> Vec<i32> {
|
||||||
v.iter().map(|num| {
|
v.iter()
|
||||||
|
.map(|num| {
|
||||||
// TODO: Do the same thing as above - but instead of mutating the
|
// TODO: Do the same thing as above - but instead of mutating the
|
||||||
// Vec, you can just return the new number!
|
// Vec, you can just return the new number!
|
||||||
num * 2;
|
num * 2
|
||||||
}).collect()
|
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user