动态数组

varray是具有构造时间限制的最大长度的可变长度数组。与普通数组不同,varray是可变的,并且是通过引用传递的。在varray下面只是一个指针。

空 Varray

空varray可以通过给定边界来构造,绑定的类型必须为:

var x = varray[int] 42.size;

必须在此表单中指定varray的类型。

从容器构建

varray可以从普通数组、列表或字符串构造,也可以从另一个varray构造,无论是否指定了边界:

var v4 = varray (1,2,3,4);              // length 4, maxlen 4
var v8 = varray (v4, 8.size);           // length 4, maxlen 8
var y8 = varray (v8);                   // length 4, maxlen 4
var y12 = varray (y8, 12.size);         // length 4, maxlen 12
var z4 = varray ([1,2,3,4]);            // length 4, maxlen 4

var s12 = varray "Hello World";         // trailing NUL included!

从默认值构造

也可以将varray构建为给定大小并使用默认值填充:

var v100 = varray (100.size, char 0); // buffer

长度

varray的长度由 len 函数,则边界由 maxlen 功能:

var x = varray 42.size;
println$ "len=" + x.len.str + ", maxlen=" + x.maxlen.str;

延伸和收缩

如果生成的数组不超过maxlen界限,则可以使用push_back过程在varray的末尾推送新元素。同样,如果数组不是空的,也可以从末尾移除元素:

var x = varray[int] 42.size;
x.push_back 16; // length now 1
x.pop_back;     // remove last element

插入位置

可以在给定位置插入元素,前提是该位置不超过当前长度,并且大于或等于maxlen:

var x = varray[int] 42.size;
insert (x, 0, 42);
insert (x, 0, 41);
insert (x, 2, 42);

删除元素

可以通过指定要删除的位置或包含范围来删除元素:

var x = varray (1,2,3,4,5,6);
erase (x, 2);
erase (x, 2, 20);

这个过程不能失败。删除数组末端的尝试将被忽略。

获取元素

如果索引在以下范围内,则可以使用get函数获取元素:

var x = varray (1,2,3,4,5,6);
println$ get (x, 3.size); // 4
println$ x.3;             // 4

最后一种形式允许任何整数类型索引varray。

设置元素

可以使用set过程修改元素:

var x = varray (1,2,3,4,5,6);
set (x, 3.size, 99); // 4 changed to 99