首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是无界数组?

什么是无界数组?
EN

Stack Overflow用户
提问于 2014-02-02 11:47:43
回答 3查看 9.4K关注 0票数 6

什么是无界数组,无界数组和动态分配数组之间有什么区别?与无界数组相关联的常见操作是什么?(就像我们有pop和push堆栈数据结构一样)

EN

回答 3

Stack Overflow用户

发布于 2014-02-02 12:07:19

动态分配的数组是一个固定大小的数组,在创建数组时大小是固定的。创建数组时,分配是动态的。一旦它被创建,它就是固定的。

注意,动态分配的动态不同。

使用无界数组,在向数组中添加项和从数组中移除项时,数组的大小可以任意增大和缩小。无界数组通常在后台使用动态分配的数组。本质上,使用动态分配的数组来创建块/内存池,以提高效率,而不是在添加新项时不断调整大小。

查看TheCodeArtist链接的文章中无界数组的代码:

代码语言:javascript
复制
struct ubarray {
    int limit; /* limit > 0 */
    int size; /* 0 <= size && size <= limit */
    elem[] A; /* \length(A) == limit */
};

请注意,该数组将根据需要增长(在达到极限时),并且由动态分配的数组支持:

代码语言:javascript
复制
elem[] A; /* \length(A) == limit */
票数 2
EN

Stack Overflow用户

发布于 2014-02-02 12:16:56

两个不同的概念。静态或动态定义的数组是有界的,因为在使用它的代码中需要知道边界是什么。对于一个未绑定的数组,代码需要一些方法来发现数组本身的边界。

e.g

代码语言:javascript
复制
sArray = Array[2..10] Of Integer
dArray = Array[x..y] Of Integer

void DoSomethingToArray(Array Of Integer : myArray)
{
   for(int i = myArray.LowerBound; i <= myArray.UpperBound; i++)
   {
      // twiddle with it.
   }
} 

您可以将sArray或dArray传递给函数,它将非常高兴。

Lower和UpperBound是一个选项,而!Stack.Empty,List.Count > 0,枚举数,甚至Sizeof(myArray) / SizeOf(myArrayType)都是可能的。重要的一点是,传递给数组的代码不需要知道数组是如何绑定的,并且可以接受任何特定类型的数组。

设置数组的边界实质上就是分配内存。一个使用数组的函数应该只关心它没有引用没有分配给数组的内存。

票数 2
EN

Stack Overflow用户

发布于 2014-02-02 12:00:51

无界数组基本上是动态的,但是动态数组在术语上可能略有不同。因为您可以动态绑定一个数组。简单地说,对于无界数组/列表是没有限制的,是的,您可以推送/弹出队列/去队列,或者从任何无界列表或数组中添加/删除。希望我的回答能澄清你的问题。

代码语言:javascript
复制
int userInput = 0;
 Array dynamic_arr = new Array[userinput];//example of dynamic array
List<string> unbounded_arr = new List<string>(); // example of unbounded array
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21510201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档