向量、集合和元组之间的区别

39
在编程中,向量,集合和元组之间有什么区别?

你已经得到了答案,但是作为一个额外的观点,在数学中,集合也可以是无限的,例如集合 {1,2,3,...} 或实数集。 - jds
7个回答

82
  • 向量(Vector):相同类型对象的有序集合。
  • 集合(Set):无序集合,可能包含相同类型或不同类型的对象,具体取决于集合类型和语言。每个对象只能出现一次。
  • 元组(Tuple):不同类型对象的有序集合。

1
我以前没有看过将向量定义限制为单一类型的资源...如果您感兴趣,可以指向一个资源吗? - brabster
1
@Brabster:在C++中,std::vector是一个例子。 - RichieHindle
2
我认为,由于这些术语涉及到计算机科学中充满证明的数学方面,因此定义不一定是你的同事所使用的该词的含义。 - ryansstack
3
我不同意Brabster所说的Java对向量类型没有限制的观点。从这个角度来看,std::vector也不会限制类型,因为您始终可以拥有一个未受限指针的向量。在Java中,向量包含对象类型,它并非不受限制的。 - Ankur Goel
元组的元素不一定是不同类型的。 - Philippe
显示剩余3条评论

21

向量是一个允许重复项的有序序列。

集合是一个无序的不允许重复项的集合。

元组是一种给定长度的有序序列。


8

在数学上,元组具有与集合不同的属性。

元组可以包含相同元素的多个实例,因此元组(1,2,2,3) != (1,2,3),但是集合{1,2,2,3} = {1,2,3}。

  • 元组元素是有序的:元组(1,2,3) != (3,2,1),但是集合{1,2,3} = {3,2,1}。
  • 元组有限制数量的元素,而集合或多重集可能有无限数量的元素。
  • 向量是由多个元组表示的不同类型。

    干杯 :-)


    6

    元组是一种异构对象的集合,应该将其视为单个单位:例如,("John", "Smith", 30) 是一个 (String, String, Integer) 的元组。

    列表(在 C++ 中也称为向量)是一组同类型的对象 -- 每个对象可以被统一处理。它们是否实际上是相同的类型取决于语言,但重点是它们可以以相同的方式进行处理。

    集合是一组无序且唯一的同类型对象 -- 你知道它包含什么对象和它们的类型,但不知道它们的顺序,并且每个对象只包含一次。


    double将是一个由两个元素组成的二元组(2-tuple),尽管在计算机上下文中,该术语通常具有不同的含义。 - SingleNegationElimination
    3
    在C++中,“list”和“vector”是不同的概念。虽然它们都表示有序、同构集合,但是“list”意味着O(1)的插入操作,而“vector”则意味着O(1)的查找操作。也就是说,“list”被实现为某种链表结构,“vector”则被实现为数组。 - SingleNegationElimination
    令牌:感谢列表/向量二元性,我已经澄清在C++中向量是一种附加类型。 - John Millikin

    3

    向量具有排序。

    元组是有序的且可以有重复元素。

    集合是无序的,重复元素不改变集合。

    例如:{a,b}、{b,a}和{b,b,a}都是相同的集合,而(a,b)、(b,a)和(b,b,a)都是不同的元组。


    2
    区别在于元组(tuples)不应被视为集合,而向量和集合则是集合。
    - 元组旨在表示复合值,例如具有(x,y,z)坐标的三维空间中的位置。将其视为集合没有意义,因为它是3个数字的列表,但这3个数字具有不同的含义,并且组合起来形成一个特定的含义。 - 将元组视为具有无名称的位置属性的结构体,可以具有不同类型。因此,不适合存储大量值,这就是为什么所有这些东西的实现都针对少量元组进行了优化。例如,SQL数据库中用于描述单行列的类型就是元组,事实上关系代数中的行就是这样称呼的。 - 向量(Vector)是有序集合,旨在存储大量值,并通常实现为根据需要增长并保持O(1)访问的方式。例如,在没有主键的SQL数据库中,表就是元组的向量。 - 集合(Set)是一组唯一的元素,可以排序但不必须。例如,在具有主键的SQL数据库中,表就是元组的集合。

    tuples 的清晰解释。 - fmc

    0

    向量具有顺序,集合没有(且不能有重复项),元组与向量接近,但通常在实践中更像结构体。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接