术语“长度”和“大小”之间是不是存在技术差异(当然是在编程中)? [复制]

Posted

技术标签:

【中文标题】术语“长度”和“大小”之间是不是存在技术差异(当然是在编程中)? [复制]【英文标题】:Is there a technical difference between the terms "length" and "size" (in programming, of course)? [duplicate]术语“长度”和“大小”之间是否存在技术差异(当然是在编程中)? [复制] 【发布时间】:2011-01-13 06:57:55 【问题描述】:

可能重复:count vs length vs size in a collection

特别是在 Java 中,在 Strings 上,您调用 string.length(),而在 Lists 中,您调用 list.size()。这两个术语之间是否存在技术差异,将String 视为真的只是chars 的列表?

感谢任何 cmets。

【问题讨论】:

也许区别在于length 与序列一起使用(即连续的东西)。而更一般的size 与集合(只是项目的集合)一起使用? ***.com/questions/300522/…中的类似讨论 【参考方案1】:

通常,length() 用于具有恒定长度的事物,而 size() 用于具有可变长度的事物。除此之外,我不知道使用两个几乎是同义词的充分理由。

【讨论】:

假设这样,length() 用于 immutable 数据类型,如 String,size() 用于 可变 数据类型,如 List.【参考方案2】:

理想情况下,count 是项目数,size 是占用的存储量(如sizeof)。

实际上,这三个(包括最模糊的length)在许多广泛使用的库中都被混淆了,所以在这个阶段试图对它们强加一个模式是没有意义的。

【讨论】:

+1 承认程序员并不完美。 有时size 用于表示项目数,capacity 用于表示占用的存储量。 @litb,关于 C++,尽管尚未分配存储空间,vector<T>::capacity 是否有可能返回非零值?在正确的resize 发生之前尝试使用存储将是未定义的行为。所以一个实现可能会延迟实际分配到那时——然后它也可能分配比我们要求的更多。所以capacity 更像是对实现的提示,而不是实际的存储使用声明。毫无疑问,这样的实现会破坏很多现存的程序,那些执行v.reserve(200)然后直接进入&v[100]的程序。 这种行为会使.begin().end() 失效,我想。但是,您可以保证它们至少在.capacity() - .size() push-backs 内保持有效。【参考方案3】:

对我来说,

"length" 表示顺序,你测量的是从开始到结束的长度。

“大小”表示某物有多大,但不表示顺序、开始或结束。

【讨论】:

【参考方案4】:

我不这么认为。这更有可能是由于 API 在大型团队中工作,并且不同的人对名称应该有不同的看法,尤其是在某些上下文中具有同义词的单词,例如在这件事中的大小和长度。

【讨论】:

【参考方案5】:

正如其他人所提到的,我认为这是语义上的差异。数组的定义非常明确,称为有长度。对象的集合更加模糊,部分原因是它的实现(是数组、链表还是树?)不一定是你关心的。一棵树并没有真正的长度,但它有一个确定的大小,所以大小在语义上可能更有意义。

【讨论】:

不对数组使用size 是有意义的,因为数组确实有大小,但不是元素的数量。 int[5] 数组的长度为 5,大小为 20(5 个元素,每个元素为 4 个字节,构成 20 个字节)。但这与您的树示例冲突,好像树大小是树中元素的数量,那么您将如何命名内存中的实际大小?因此,我也不会将大小用于树,而是使用 countnumberOfNodes。我一般会避免length,除非我们谈论根据定义具有长度的事物,例如一个字符串有一个长度(和一个大小!)但它不应该有一个count【参考方案6】:

对我来说,“大小”用于描述计算机中的结构或其他方式来组织字节。它不一定必须被实例化。另一方面,“长度”表示内存中特定字节缓冲区在给定点的大小。

例如您提供的缓冲区的长度是多少?它的字节数与结构 x 的大小相同。

【讨论】:

以上是关于术语“长度”和“大小”之间是不是存在技术差异(当然是在编程中)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

视图和存储过程之间是不是存在性能差异

C ++中的指针和引用之间是不是存在任何开销差异[重复]

视图和内联表函数之间是不是存在性能差异?

SVG 属性和样式之间是不是存在性能差异?

原始的 Scintilla 和 ScnitillaNet 控件之间是不是存在重大差异?

for 循环和 for-each 循环之间是不是存在性能差异?