I like the c++ one because its obvious whats happening in there. Compare the rust code you don't really know what is created/destroyed. Still it should not make much of a difference for the compiler I assume but that probably depends on what objects you are handling.
fn main() {
let text = String::from("python rules sepples drools");
let words: Vec<String> = text
.split_whitespace()
.map(|s| s.to_string())
.collect();
for word in words {
println!("{}", word);
}
}