【发布时间】:2017-12-15 10:55:20
【问题描述】:
在this answer 中提到,对于一个字符串
s.chars().count() 获取字符数是 O(n) 操作。
对于简单的 ASCII 字符串,使用 s.len() 获取字节数也可以。当使用检查来确保所有这些字节实际上都是 ASCII 时,这可能是安全的。
我想知道该操作的复杂性是什么。它可能仍然需要像在 C 中那样找到字符串的结尾并且是 O(n)。
我试着查了一下,发现documentation of the std::string::String,
这适用于适当的s。但是它没有说明它的复杂性。查看源代码它只是这样做self.vec.len()。所以我们去查看vector docs,发现它只是返回了一个存储长度self.len,这意味着这确实是一个O(1)操作。
不过,这是很多工作。那么s 是std::str 的情况呢?我尝试做同样的事情,但卡在this mess。
对于 Rust 中的操作复杂性,是否有更易于访问的资源?
像list for Python 这样的东西会很棒。
【问题讨论】:
-
请注意,检查所有字符都是 ascii 是 O(n),就像
s.chars().count(),所以除非你需要检查其他原因,你最好使用s.chars().count()。 -
应记录所有数据类型的复杂性。如果它们丢失,请随时发送 PR 或提出问题。我不认为一个包含所有复杂性的集中列表是合适的地方。这仅对集合有意义,您需要概览来决定使用哪个集合。
标签: rust