String 铁锈中的字符串基本上是一个向量吗?

String 铁锈中的字符串基本上是一个向量吗?,string,rust,String,Rust,从: pub结构字符串{ vec:vec,//字符串{ 字符串{vec:vec::new()}//是和否。String用于保存其数据的底层缓冲区是Vec。这很有意义,因为通常您希望字符串和向量的分配策略相似。在Stringimpl中手动执行所有分配将浪费时间和大量重复代码 但是,请注意,vec字段是私有的,因此您不能直接访问它(仅使用安全方法)。这意味着(safe)String接口可以在向量中强制执行有效的UTF8数据 但是是的:String只是一个UTF8强制包装器,它围绕着某种缓冲区 在R

从:

pub结构字符串{
vec:vec,//字符串{

字符串{vec:vec::new()}//是和否。
String
用于保存其数据的底层缓冲区是
Vec
。这很有意义,因为通常您希望字符串和向量的分配策略相似。在
String
impl中手动执行所有分配将浪费时间和大量重复代码

但是,请注意,
vec
字段是私有的,因此您不能直接访问它(仅使用安全方法)。这意味着(safe)
String
接口可以在向量中强制执行有效的UTF8数据

但是是的:
String
只是一个UTF8强制包装器,它围绕着某种缓冲区



在Rust 1.0发布之前,关于是否通过接口公开此内部向量,进行了相当长的讨论。讨论的结果是保留有问题的方法。在某些情况下,此方法当然很方便,但使以后无法更改字符串的实现。

我想您回答了您自己的问题:)您甚至可以使用将向量移出。这应该是
作为\u mut\u vec
?@mcarton绝对正确!谢谢,会解决这个问题的。
pub struct String {
    vec: Vec<u8>, // <- ?
}

impl String {
    // ...
    pub fn new() -> String {
        String { vec: Vec::new() } // <- ?
    }
    // ...
 }