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() } // <- ?
}
// ...
}