Trong ngắn: mảng di động là một không đồng nhất container, mảng thường là đồng nhất. Điều này có nghĩa rằng trong một mảng thường xuyên tất cả các phần tử có cùng loại, trong khi trong mảng ô, chúng có thể khác nhau. Bạn có thể đọc thêm về mảng ô here.
Sử dụng mảng tế bào khi:
- Bạn có các loại khác nhau trong mảng của bạn
- Bạn không chắc chắn liệu trong tương lai bạn có thể mở rộng nó với các loại khác
- Bạn đang làm việc với các đối tượng có mẫu kế thừa
- Bạn đang làm việc với một chuỗi các chuỗi - hầu như trong mọi trường hợp, nó thích hợp hơn là char (n, m)
- Bạn có một mảng lớn, và bạn thường xuyên cập nhật một yếu tố duy nhất trong một chức năng - Do Matlabs copy-on-viết chính sách
- Bạn đang làm việc có tay cầm chức năng (như @Pursuit giải thích)
thích thường xuyên mảng khi:
- Tất cả các yếu tố có cùng loại
- Bạn đang cập nhật toàn bộ mảng trong một shot - như Các hoạt động toán học.
- Bạn muốn có loại an toàn
- Bạn sẽ không thay đổi kiểu dữ liệu của mảng trong tương lai
- Bạn đang làm việc với ma trận toán học.
- Bạn đang làm việc với các đối tượng mà không có thừa kế
Nhiều lời giải thích về copy-on-viết:
Khi bạn truyền một mảng tới một hàm, một con trỏ/tham chiếu là thông qua.
function foo(x)
disp(x);
end
x= [1 2 3 4 5];
foo(x); %No copy is done here! A pointer is passed.
Nhưng khi bạn thay đổi (hoặc một phần của nó), bản sao được tạo.
function foo(x)
x(4) = x(4) + 1;
end
x= [1 2 3 4 5];
foo(x); %x is being copied! At least twice memory amount is needed.
Trong mảng ô, chỉ ô được sao chép.
function foo(x)
x{4} = x{4} + 1;
end
x= {1 2 3 4 5}; %Only x{4} will be copied
Do đó, nếu bạn gọi hàm thay đổi một phần tử trên một mảng lớn, bạn đang tạo nhiều bản sao - làm cho bản sao chậm hơn. Nhưng trong một mảng tế bào, nó không phải là trường hợp.
Nguồn
2012-03-13 14:32:53
Có thể liên quan - http://stackoverflow.com/questions/9055015/difference-between-accessing-cell-elements-using-and-curly-or-normal-brac/9055336#9055336 –