Nếu dự án của bạn là CLI (Hỗ trợ thời gian chạy ngôn ngữ chung) , thì:
Bạn có thể sử dụng lớp mảng, không phải lớp bạn nhận được khi viết:
#include <array>
using namespace std;
Nói cách khác, không phải lớp mảng không được quản lý mà bạn nhận được khi sử dụng không gian tên std và khi bao gồm tiêu đề mảng, không phải là lớp mảng không được quản lý được xác định trong không gian tên std và trong tiêu đề mảng, mà là mảng lớp được quản lý của CLI.
với lớp này, bạn có thể tạo một mảng của bất kỳ thứ hạng nào bạn muốn.
Đoạn mã sau đây tạo ra mảng hai chiều mới gồm 2 hàng và 3 cột và kiểu int và tôi đặt tên là "mảng":
array<int, 2>^ arr = gcnew array<int, 2>(2, 3);
Bây giờ bạn có thể truy cập các phần tử trong mảng, bằng cách đặt tên cho nó và chỉ viết một dấu ngoặc vuông []
và bên trong chúng, thêm hàng và cột và phân tách chúng bằng dấu phẩy ,
.
Đoạn mã dưới đây truy cập một phần tử ở hàng thứ 2 và cột thứ nhất của mảng tôi đã tạo trong mã trước đó ở trên:
arr[0, 1]
chỉ viết dòng này là để đọc giá trị trong ô đó, tức là lấy giá trị trong ô này, nhưng nếu bạn thêm =
dấu bằng , bạn sẽ viết giá trị trong ô đó, tức là đặt giá trị trong ô này. Tất nhiên, bạn cũng có thể sử dụng các toán tử + =, - =, * = và / =, chỉ cho các số (int, float, double, __int16, __int32, __int64 và v.v.), nhưng chắc chắn bạn đã biết nó.
Nếu dự án của bạn không phải là CLI, thì bạn có thể sử dụng lớp mảng không được quản lý của không gian tên std, nếu bạn #include <array>
, tất nhiên, nhưng vấn đề là lớp mảng này khác với mảng CLI. Tạo mảng kiểu này giống như CLI, ngoại trừ việc bạn sẽ phải xóa ^
dấu hiệu và gcnew
từ khóa. Nhưng thật không may, tham số int thứ hai trong <>
ngoặc đơn chỉ định độ dài (tức là kích thước) của mảng, không phải thứ hạng của nó!
Không có cách nào để chỉ định thứ hạng trong loại mảng này, thứ hạng chỉ là tính năng của mảng CLI . .
mảng std hoạt động giống như mảng bình thường trong c ++, mà bạn xác định bằng con trỏ, ví dụ int*
và sau đó: new int[size]
hoặc không có con trỏ: int arr[size]
nhưng không giống như mảng bình thường của c ++, mảng std cung cấp các hàm mà bạn có thể sử dụng với các phần tử của mảng, như điền, bắt đầu, kết thúc, kích thước, v.v., nhưng mảng bình thường không cung cấp gì .
Nhưng mảng std vẫn là mảng một chiều, giống như mảng c ++ bình thường. Nhưng nhờ các giải pháp mà những người khác đề xuất về cách bạn có thể tạo mảng một chiều c ++ bình thường thành mảng hai chiều, chúng ta có thể điều chỉnh các ý tưởng tương tự thành mảng std, ví dụ theo ý tưởng của Mehrdad Afshari, chúng ta có thể viết mã sau:
array<array<int, 3>, 2> array2d = array<array<int, 3>, 2>();
Dòng mã này tạo ra một "mảng jugged" , là một mảng một chiều mà mỗi ô của nó là hoặc trỏ đến một mảng một chiều khác.
Nếu tất cả các mảng một chiều trong mảng một chiều bằng nhau về chiều dài / kích thước của chúng, thì bạn có thể coi biến Array2d là mảng hai chiều thực, ngoài ra bạn có thể sử dụng các phương thức đặc biệt để xử lý các hàng hoặc cột, tùy thuộc vào cách bạn xem nó trong tâm trí, trong mảng 2D, mảng std đó hỗ trợ.
Bạn cũng có thể sử dụng giải pháp của Kevin Loney:
int *ary = new int[sizeX*sizeY];
// ary[i][j] is then rewritten as
ary[i*sizeY+j]
nhưng nếu bạn sử dụng mảng std, mã phải trông khác:
array<int, sizeX*sizeY> ary = array<int, sizeX*sizeY>();
ary.at(i*sizeY+j);
Và vẫn có các chức năng duy nhất của mảng std.
Lưu ý rằng bạn vẫn có thể truy cập các phần tử của mảng std bằng []
dấu ngoặc đơn và bạn không phải gọi at
hàm. Bạn cũng có thể định nghĩa và gán biến int mới sẽ tính toán và giữ tổng số phần tử trong mảng std và sử dụng giá trị của nó, thay vì lặp lạisizeX*sizeY
Bạn có thể định nghĩa lớp chung mảng hai chiều của riêng mình và xác định hàm tạo của lớp mảng hai chiều để nhận hai số nguyên để chỉ định số lượng hàng và cột trong mảng hai chiều mới và xác định hàm get nhận hai tham số nguyên. truy cập một phần tử trong mảng hai chiều và trả về giá trị của nó và đặt hàm nhận ba tham số, hai tham số đầu tiên là các số nguyên xác định hàng và cột trong mảng hai chiều và tham số thứ ba là giá trị mới của thành phần. Loại của nó phụ thuộc vào loại bạn đã chọn trong lớp chung.
Bạn sẽ có thể thực hiện tất cả điều này bằng cách sử dụng một trong hai c bình thường ++ mảng (con trỏ hoặc không) hoặc các mảng std và sử dụng một trong những ý tưởng mà người khác đề nghị, và làm cho nó dễ dàng để sử dụng như mảng cli, hoặc như hai mảng thứ nguyên mà bạn có thể xác định, gán và sử dụng trong C #.