术语“长度”和“大小”之间是不是存在技术差异(当然是在编程中)? [复制]
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 个字节)。但这与您的树示例冲突,好像树大小是树中元素的数量,那么您将如何命名内存中的实际大小?因此,我也不会将大小用于树,而是使用 count
或 numberOfNodes
。我一般会避免length
,除非我们谈论根据定义具有长度的事物,例如一个字符串有一个长度(和一个大小!)但它不应该有一个count
。【参考方案6】:
对我来说,“大小”用于描述计算机中的结构或其他方式来组织字节。它不一定必须被实例化。另一方面,“长度”表示内存中特定字节缓冲区在给定点的大小。
例如您提供的缓冲区的长度是多少?它的字节数与结构 x 的大小相同。
【讨论】:
以上是关于术语“长度”和“大小”之间是不是存在技术差异(当然是在编程中)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章