将 `&str` 添加到 `String` 的最有效方法是什么?

Ibr*_*med 4 rust

将 a 添加&str到 a的最有效方法是String什么?现在我正在分配一个新的String并推动它:

fn push_front(s: String, prefix: &str) -> String {
  let prefix = prefix.to_owned();
  prefix.push_str(&s);
  prefix
}
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法?我String::push_front在标准库中没有看到函数。

Ibr*_*med 5

您可以使用String::insert_str

s.insert_str(0, prefix);
Run Code Online (Sandbox Code Playgroud)

不是为推送分配新的String (潜在的)分配,而是insert_str在底层向量中保留容量并将 的元素s向右移动。如果String已经有足够的容量prefix,则完全避免分配。这意味着它最多只需要一个分配,而不是两个。