动态数组
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