Skip to content

Commit ed52504

Browse files
committed
docs: add vector examples
1 parent f7188c7 commit ed52504

8 files changed

Lines changed: 176 additions & 0 deletions

Cargo.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,15 @@ name = "rust_data_structures"
1212
path = "src/lib.rs"
1313

1414
[dependencies]
15+
16+
[[example]]
17+
name = "solution_vector_trace_growth"
18+
path = "examples/soluciones/vector_trace_growth.rs"
19+
20+
[[example]]
21+
name = "solution_vector_insert_sorted"
22+
path = "examples/soluciones/vector_insert_sorted.rs"
23+
24+
[[example]]
25+
name = "solution_vector_retain_prefix"
26+
path = "examples/soluciones/vector_retain_prefix.rs"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
fn main() {
4+
let mut values = Vector::new();
5+
values.push(10);
6+
values.push(30);
7+
values.push(50);
8+
9+
insert_sorted(&mut values, 40);
10+
insert_sorted(&mut values, 20);
11+
12+
let ordered = values.iter().copied().collect::<Vec<_>>();
13+
assert_eq!(ordered, vec![10, 20, 30, 40, 50]);
14+
println!("{ordered:?}");
15+
}
16+
17+
fn insert_sorted(values: &mut Vector<i32>, value: i32) {
18+
let mut index = 0;
19+
20+
while let Some(current) = values.get(index) {
21+
if *current >= value {
22+
break;
23+
}
24+
index += 1;
25+
}
26+
27+
values
28+
.insert(index, value)
29+
.expect("index is between 0 and len");
30+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
fn main() {
4+
let mut values = Vector::new();
5+
6+
for value in ["api", "api/v1", "api/v2", "admin", "assets"] {
7+
values.push(value);
8+
}
9+
10+
retain_prefix(&mut values, "api");
11+
12+
let retained = values.iter().copied().collect::<Vec<_>>();
13+
assert_eq!(retained, vec!["api", "api/v1", "api/v2"]);
14+
println!("{retained:?}");
15+
}
16+
17+
fn retain_prefix(values: &mut Vector<&str>, prefix: &str) {
18+
let mut index = 0;
19+
20+
while index < values.len() {
21+
let keep = values
22+
.get(index)
23+
.expect("index is inside len")
24+
.starts_with(prefix);
25+
26+
if keep {
27+
index += 1;
28+
} else {
29+
values.remove(index);
30+
}
31+
}
32+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
fn main() {
4+
let mut values = Vector::new();
5+
let mut trace = Vec::new();
6+
7+
for value in [10, 20, 30, 40, 50] {
8+
values.push(value);
9+
trace.push((values.len(), values.capacity()));
10+
}
11+
12+
assert_eq!(trace, vec![(1, 1), (2, 2), (3, 4), (4, 4), (5, 8)]);
13+
println!("{trace:?}");
14+
}

examples/vector_advanced.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
fn main() {
4+
let mut values = Vector::with_capacity(2);
5+
println!("capacidad inicial: {}", values.capacity());
6+
7+
for value in 0..6 {
8+
values.push(value);
9+
println!(
10+
"push({value}) -> len: {}, capacity: {}",
11+
values.len(),
12+
values.capacity()
13+
);
14+
}
15+
16+
values.clear();
17+
println!(
18+
"despues de clear -> len: {}, capacity conservada: {}",
19+
values.len(),
20+
values.capacity()
21+
);
22+
}

examples/vector_basic.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
fn main() {
4+
let mut topics = Vector::new();
5+
6+
topics.push("vector");
7+
topics.push("linked_list");
8+
topics.push("stack");
9+
10+
println!("primer tema: {}", topics.get(0).unwrap());
11+
println!("ultimo tema removido: {}", topics.pop().unwrap());
12+
println!("temas restantes: {}", topics.len());
13+
}

examples/vector_intermediate.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
fn main() {
4+
let mut priorities = Vector::new();
5+
6+
priorities.push("documentar invariantes");
7+
priorities.push("escribir benchmarks");
8+
priorities
9+
.insert(1, "agregar tests de borde")
10+
.expect("insertar dentro de la longitud es valido");
11+
12+
for (index, task) in priorities.iter().enumerate() {
13+
println!("{index}: {task}");
14+
}
15+
16+
let removed = priorities.remove(0).expect("hay una tarea inicial");
17+
println!("tarea completada: {removed}");
18+
}

examples/vector_real_case.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use rust_data_structures::vector::Vector;
2+
3+
#[derive(Debug)]
4+
struct CandidateRoom {
5+
code: &'static str,
6+
nightly_price_cents: u32,
7+
}
8+
9+
fn main() {
10+
let mut candidates = Vector::new();
11+
12+
candidates.push(CandidateRoom {
13+
code: "STD-01",
14+
nightly_price_cents: 14_000,
15+
});
16+
candidates.push(CandidateRoom {
17+
code: "KING-02",
18+
nightly_price_cents: 21_000,
19+
});
20+
candidates.push(CandidateRoom {
21+
code: "STE-07",
22+
nightly_price_cents: 32_000,
23+
});
24+
25+
let cheapest = candidates
26+
.iter()
27+
.min_by_key(|room| room.nightly_price_cents)
28+
.expect("hay al menos una habitacion candidata");
29+
30+
println!(
31+
"habitacion candidata mas barata: {} (${})",
32+
cheapest.code,
33+
cheapest.nightly_price_cents / 100
34+
);
35+
}

0 commit comments

Comments
 (0)