繁体   English   中英

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

[英]What is the most efficient way to prepend a `&str` to a `String`?

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

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

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

您可以使用String::insert_str

s.insert_str(0, prefix);

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

使用String::insert_str

fn push_front(s: String, prefix: &str) -> String {
  s.insert_str(0, prefix);
  s
}

这将使用 0-1 分配而不是原始的 1-2。

没有 String::push_front,但有 String::insert_str。

fn main(){
    let a = "foo";
    let mut b = "bar".to_owned();
    b.insert_str(0,a);
    dbg!{b};
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM