ArrayRemove
Xóa số lượng phần tử được chỉ định khỏi mảng bắt đầu từ chỉ số được chỉ định.
bool ArrayRemove(
void& array[], // mảng thuộc bất kỳ loại nào
uint start, // chỉ số bắt đầu xóa
uint count=WHOLE_ARRAY // số lượng phần tử
);
2
3
4
5
Tham số
array[]
[in][out] Mảng.
start
[in] Chỉ số, bắt đầu từ đó các phần tử của mảng bị xóa.
count=WHOLE_ARRAY
[in] Số lượng phần tử bị xóa. Giá trị WHOLE_ARRAY
có nghĩa là xóa tất cả các phần tử từ chỉ số được chỉ định đến cuối mảng.
Giá trị trả về
Trả về true nếu thành công, nếu không trả về false. Để biết thông tin về lỗi, gọi hàm GetLastError(). Các lỗi có thể xảy ra:
- 5052 – ERR_SMALL_ARRAY (giá trị
start
quá lớn), - 5056 – ERR_SERIES_ARRAY (mảng không thể thay đổi, bộ đệm chỉ báo),
- 4003 – ERR_INVALID_PARAMETER (giá trị
count
quá lớn), - 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (mảng kích thước cố định chứa các đối tượng phức tạp có hàm hủy),
- 4006 - ERR_INVALID_ARRAY (mảng kích thước cố định chứa các đối tượng cấu trúc hoặc lớp có hàm hủy).
Ghi chú
Nếu hàm được sử dụng cho mảng kích thước cố định, kích thước mảng không thay đổi: phần "đuôi" còn lại được sao chép vật lý đến vị trí start
. Để hiểu chính xác cách hàm hoạt động, xem ví dụ dưới đây. Sao chép "vật lý" nghĩa là các đối tượng được sao chép không được tạo ra bằng cách gọi hàm tạo hoặc toán tử sao chép. Thay vào đó, biểu diễn nhị phân của đối tượng được sao chép. Vì lý do này, bạn không thể áp dụng hàm ArrayRemove()
cho mảng kích thước cố định chứa các đối tượng có hàm hủy (lỗi ERR_INVALID_ARRAY hoặc ERR_STRUCT_WITHOBJECTS_ORCLASS được kích hoạt). Khi xóa một đối tượng như vậy, hàm hủy cần được gọi hai lần – cho đối tượng gốc và bản sao của nó.
Bạn không thể xóa các phần tử khỏi mảng động được chỉ định làm bộ đệm chỉ báo bởi hàm SetIndexBuffer(). Điều này sẽ dẫn đến lỗi ERR_SERIES_ARRAY. Đối với bộ đệm chỉ báo, tất cả các thao tác thay đổi kích thước được thực hiện bởi hệ thống con thực thi của terminal.
Ví dụ:
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- khai báo mảng kích thước cố định và điền giá trị
int array[10];
for(int i=0;i<10;i++)
{
array[i]=i;
}
//--- hiển thị mảng trước khi xóa các phần tử
Print("Before calling ArrayRemove()");
ArrayPrint(array);
//--- xóa 2 phần tử khỏi mảng và hiển thị tập hợp mới
ArrayRemove(array,4,2);
Print("After calling ArrayRemove()");
ArrayPrint(array);
/*
Kết quả thực thi:
Before calling ArrayRemove()
0 1 2 3 4 5 6 7 8 9
After calling ArrayRemove()
0 1 2 3 6 7 8 9 8 9
*/
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26