fn take<T>(vec: Vec<T>, index: usize) -> Option<T> , , . , , Vec<String> 10, 9 1. .
API, , fn take<T>(vec: &mut Vec<T>, index: usize) -> Option<T>.
, , :
- , ,
Vec::swap_remove, - , - ,
Vec::drain.
, .
swap_remove:
fn take<T>(mut vec: Vec<T>, index: usize) -> Option<T> {
if index < vec.len() {
Some(vec.swap_remove(index))
} else {
None
}
}
drain:
fn take<T>(mut vec: Vec<T>, index: usize) -> Option<T> {
if index < vec.len() {
vec.drain(index..index+1).next()
} else {
None
}
}
, : O (1).
, , Vec Vec remove swap_remove do.
- .
, , ; :
swap_remove, , ,- , ,
index.
, ; - , ( ), .
-, Vec, ?
swap_remove, 3 :
swap_remove (O (1)),- (O (N)),
- .
2 , Drop, , (2) (3) .
TL; DR: , , , .