Bạn đang xem : mảng trong c ++

Mảng là gì

Điều đó có nghĩa là, ví dụ, năm giá trị kiểu int có thể được khai báo dưới dạng một mảng mà không cần phải khai báo 5 biến khác nhau (mỗi biến có định danh riêng). Thay vào đó, bằng cách sử dụng một mảng, năm giá trị int được lưu trữ trong các vị trí bộ nhớ liền nhau và cả năm giá trị này đều có thể được truy cập bằng cách sử dụng cùng một số nhận dạng, với chỉ mục thích hợp.

Ví dụ: một mảng chứa 5 giá trị nguyên của kiểu int được gọi là foo có thể được biểu diễn dưới dạng:

trong đó mỗi bảng trống đại diện cho một phần tử của mảng. Trong trường hợp này, đây là các giá trị kiểu int . Các phần tử này được đánh số từ 0 đến 4, là 0 đầu tiên và 4 là cuối cùng; Trong C ++, phần tử đầu tiên trong một mảng luôn được đánh số bằng số 0 (không phải là một), bất kể độ dài của nó.

Giống như một biến thông thường, một mảng phải được khai báo trước khi nó được sử dụng. Một khai báo điển hình cho một mảng trong C ++ là:


tên loại [các phần tử];


trong đó type là loại hợp lệ (chẳng hạn như int , float …), name là số nhận dạng hợp lệ và trường phần tử (luôn được đặt trong dấu ngoặc vuông [] ), chỉ định độ dài của mảng về số lượng phần tử.

Do đó, mảng foo , với năm phần tử kiểu int , có thể được khai báo là:

   
  int foo [5];  

LƯU Ý: Trường phần tử trong dấu ngoặc vuông [] , đại diện cho số phần tử trong mảng, phải là a, vì mảng là khối bộ nhớ tĩnh có kích thước phải được xác định tại thời điểm biên dịch, trước khi chương trình chạy.

Mảng là một chuỗi các phần tử cùng kiểu được đặt ở các vị trí bộ nhớ liền kề có thể được tham chiếu riêng lẻ bằng cách thêm một chỉ mục vào một mã định danh duy nhất. phải khai báo 5 biến khác nhau (mỗi biến có định danh riêng). Thay vào đó, bằng cách sử dụng một mảng, năm giá trị được lưu trữ trong các vị trí bộ nhớ liền nhau và cả năm giá trị đều có thể được truy cập bằng cách sử dụng cùng một mã định danh, với chỉ mục thích hợp. đại diện cho một phần tử của mảng. Trong trường hợp này, đây là các giá trị của kiểu. Các phần tử này được đánh số từ 0 đến 4, là 0 đầu tiên và 4 là cuối cùng; Trong C ++, phần tử đầu tiên trong một mảng luôn được đánh số bằng 0 (không phải là một), bất kể độ dài của nó. Giống như một biến thông thường, một mảng phải được khai báo trước khi nó được sử dụng. Một khai báo điển hình cho một mảng trong C ++ là: whereis là một kiểu hợp lệ (chẳng hạn như …), là một mã định danh hợp lệ và trường (luôn được đặt trong dấu ngoặc vuông), chỉ định độ dài của mảng theo số lượng Do đó, mảng, với năm phần tử cùng kiểu, có thể được khai báo là: LƯU Ý: Trường trong dấu ngoặc vuông, đại diện cho số phần tử trong mảng, phải là a, vì mảng là khối bộ nhớ tĩnh có kích thước phải được xác định tại thời gian biên dịch, trước khi chương trình chạy.

Khởi tạo mảng

Theo mặc định, các mảng thông thường của (ví dụ, những mảng được khai báo trong một hàm) không được khởi tạo. Điều này có nghĩa là không có phần tử nào của nó được đặt thành bất kỳ giá trị cụ thể nào; nội dung của chúng không được xác định tại thời điểm mảng được khai báo.

Nhưng các phần tử trong một mảng có thể được khởi tạo rõ ràng thành các giá trị cụ thể khi nó được khai báo, bằng cách đặt các giá trị ban đầu đó trong dấu ngoặc nhọn {}. Ví dụ:

   
  int foo [5] = {16, 2, 77, 40, 12071};  

Câu lệnh này khai báo một mảng có thể được biểu diễn như sau:

Số lượng giá trị giữa các dấu ngoặc nhọn {} không được lớn hơn số phần tử trong mảng. Ví dụ: trong ví dụ trên, foo được khai báo có 5 phần tử (như được chỉ định bởi số được đặt trong dấu ngoặc vuông, [] ) và dấu ngoặc nhọn { } chứa chính xác 5 giá trị, một giá trị cho mỗi phần tử. Nếu được khai báo với ít hơn, các phần tử còn lại được đặt thành giá trị mặc định của chúng (đối với các kiểu cơ bản, nghĩa là chúng được điền bằng số 0). Ví dụ:

   
  int bar [5] = {10, 20, 30};  

Sẽ tạo một mảng như thế này:

Bộ khởi tạo thậm chí có thể không có giá trị, chỉ có dấu ngoặc nhọn:

   
  int baz [5] = {};  

Điều này tạo ra một mảng gồm năm giá trị int , mỗi giá trị được khởi tạo với giá trị bằng 0:

Khi khởi tạo các giá trị được cung cấp cho một mảng, C ++ cho phép khả năng để trống dấu ngoặc vuông [] . Trong trường hợp này, trình biên dịch sẽ tự động giả định một kích thước cho mảng khớp với số giá trị được bao gồm giữa các dấu ngoặc nhọn {} :

   
  int foo [] = {16, 2, 77, 40, 12071};  

Sau khai báo này, mảng foo sẽ dài 5 int , vì chúng tôi đã cung cấp 5 giá trị khởi tạo.

Cuối cùng, sự phát triển của C ++ đã dẫn đến việc áp dụng cả mảng. Do đó, không còn cần dấu bằng giữa phần khai báo và bộ khởi tạo. Cả hai câu lệnh này đều tương đương nhau:

  1 
2
  int foo [] = {10, 20, 30};
int foo [] {10, 20, 30};  

Mảng tĩnh và những mảng được khai báo trực tiếp trong không gian tên (bên ngoài bất kỳ hàm nào), luôn được khởi tạo. Nếu không có trình khởi tạo rõ ràng nào được chỉ định, tất cả các phần tử đều được khởi tạo mặc định (với các số 0, đối với các loại cơ bản).

Theo mặc định, các mảng thông thường của (ví dụ: những mảng được khai báo trong một hàm) không được khởi tạo. Điều này có nghĩa là không có phần tử nào của nó được đặt thành bất kỳ giá trị cụ thể nào; Nội dung của chúng không được xác định tại thời điểm mảng được khai báo, nhưng các phần tử trong mảng có thể được khởi tạo rõ ràng thành các giá trị cụ thể khi nó được khai báo, bằng cách đặt các giá trị ban đầu đó trong dấu ngoặc nhọn {}. Ví dụ: Câu lệnh này khai báo một mảng có thể được biểu diễn như sau: Số giá trị giữa các nhánh không được lớn hơn số phần tử trong mảng. Ví dụ, trong ví dụ trên, được khai báo có 5 phần tử (như được chỉ định bởi số được đặt trong dấu ngoặc vuông,) và dấu ngoặc nhọn chứa chính xác 5 giá trị, mỗi giá trị một phần tử. Nếu được khai báo với ít hơn, các phần tử còn lại được đặt thành giá trị mặc định của chúng (đối với các kiểu cơ bản, nghĩa là chúng được điền bằng số 0). Ví dụ: Sẽ tạo một mảng như thế này: Bộ khởi tạo thậm chí có thể không có giá trị, chỉ có dấu ngoặc nhọn: Điều này tạo ra một mảng gồm năm giá trị, mỗi giá trị được khởi tạo với giá trị bằng 0: Khi khởi tạo giá trị được cung cấp cho một mảng, C ++ cho phép khả năng để trống dấu ngoặc vuông. Trong trường hợp này, trình biên dịch sẽ tự động giả định một kích thước cho mảng phù hợp với số giá trị được bao gồm giữa các dấu ngoặc nhọn Sau khai báo này, mảng sẽ dài thêm 5 vì chúng tôi đã cung cấp 5 giá trị khởi tạo. của cũng cho mảng. Do đó, không còn cần dấu bằng giữa phần khai báo và bộ khởi tạo. Cả hai câu lệnh này đều tương đương nhau: Mảng tĩnh và những mảng được khai báo trực tiếp trong không gian tên (bên ngoài bất kỳ hàm nào), luôn được khởi tạo. Nếu không có trình khởi tạo rõ ràng nào được chỉ định, tất cả các phần tử đều được khởi tạo mặc định (với các số 0, đối với các loại cơ bản).

Xem Thêm  Cách thay đổi văn bản và màu nền trong CSS - đặt màu văn bản css

Truy cập các giá trị của một mảng

Giá trị của bất kỳ phần tử nào trong mảng có thể được truy cập giống như giá trị của một biến thông thường cùng kiểu. Cú pháp là:

name [index]

Theo các ví dụ trước, trong đó foo có 5 phần tử và mỗi phần tử đó thuộc loại int , tên có thể được sử dụng để chỉ mỗi phần tử như sau: < br />

Ví dụ: câu lệnh sau lưu trữ giá trị 75 trong phần tử thứ ba của foo :

   
  foo [2] = 75;  

và, ví dụ, sau đây sao chép giá trị của phần tử thứ ba của foo vào một biến có tên là x :

   
  x = foo [2];  

Do đó, biểu thức foo [2] tự nó là một biến kiểu int .

Lưu ý rằng phần tử thứ ba của foo được chỉ định foo [2] , vì phần tử đầu tiên là foo [0] , phần tử thứ hai là < code> foo [1] , và do đó, mã thứ ba là foo [2] . Cũng vì lý do này, phần tử cuối cùng của nó là foo [4] . Do đó, nếu chúng ta viết foo [5] , chúng ta sẽ truy cập vào phần tử thứ sáu của foo và do đó thực sự vượt quá kích thước của mảng.

Trong C ++, về mặt cú pháp, vượt quá phạm vi chỉ số hợp lệ cho một mảng là đúng về mặt cú pháp. Điều này có thể tạo ra vấn đề, vì việc truy cập các phần tử nằm ngoài phạm vi không gây ra lỗi khi biên dịch, nhưng có thể gây ra lỗi trong thời gian chạy. Lý do cho phép điều này sẽ được xem trong chương sau khi các con trỏ được giới thiệu.

Tại thời điểm này, điều quan trọng là có thể phân biệt rõ ràng giữa hai cách sử dụng đó là dấu ngoặc nhọn [] có liên quan đến mảng. Chúng thực hiện hai nhiệm vụ khác nhau: một là chỉ định kích thước của mảng khi chúng được khai báo; và thứ hai là chỉ định các chỉ số cho các phần tử mảng cụ thể khi chúng được truy cập. Đừng nhầm lẫn hai cách sử dụng dấu ngoặc [] này với mảng.

  1 
2
  int foo [5]; // khai báo một mảng mới
foo [2] = 75; // truy cập vào một phần tử của mảng.  

Sự khác biệt chính là khai báo được đặt trước loại phần tử, trong khi quyền truy cập thì không.

Một số hoạt động hợp lệ khác với mảng:

  1 
2
3
4
  foo [0] = a;
foo [a] = 75;
b = foo [a + 2];
foo [foo [a]] = foo [2] + 5;  

Ví dụ:

  1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  // ví dụ về mảng
#include & lt; iostream & gt;
sử dụng không gian tên std;

int foo [] = {16, 2, 77, 40, 12071};
int n, kết quả = 0;

int main ()
{
  cho (n = 0; n & lt; 5; ++ n)
  {
    kết quả + = foo [n];
  }
  cout & lt; & lt; kết quả;
  trả về 0;
}  
 12206 

Có thể truy cập giá trị của bất kỳ phần tử nào trong một mảng giống như giá trị của một biến thông thường cùng kiểu. Cú pháp là: Tiếp theo các ví dụ trước, trong đó có 5 phần tử và mỗi phần tử đó là kiểu, tên có thể được sử dụng để chỉ mỗi phần tử như sau: Ví dụ: câu lệnh sau lưu trữ giá trị 75 trong phần tử thứ ba và, ví dụ, sau đây sao chép giá trị của phần tử thứ ba vào một biến được gọi Là. Cũng bởi lý do này, yếu tố cuối cùng của nó là. Do đó, nếu chúng ta viết, chúng ta sẽ truy cập phần tử thứ sáu của và do đó thực sự vượt quá kích thước của mảng. Trong C ++, về mặt cú pháp, vượt quá phạm vi chỉ số hợp lệ cho một mảng là đúng. Điều này có thể tạo ra vấn đề, vì việc truy cập các phần tử nằm ngoài phạm vi không gây ra lỗi khi biên dịch, nhưng có thể gây ra lỗi trong thời gian chạy. Lý do cho phép điều này sẽ được trình bày trong chương sau khi con trỏ được giới thiệu. Tại thời điểm này, điều quan trọng là có thể phân biệt rõ ràng giữa hai cách sử dụng có liên quan đến mảng. Chúng thực hiện hai nhiệm vụ khác nhau: một là chỉ định kích thước của mảng khi chúng được khai báo; và thứ hai là chỉ định các chỉ số cho các phần tử mảng cụ thể khi chúng được truy cập. Đừng nhầm lẫn giữa hai cách sử dụng có thể có của dấu ngoặc với mảng. Sự khác biệt chính là khai báo được đặt trước kiểu của phần tử, trong khi quyền truy cập thì không. Một số thao tác hợp lệ khác với mảng: Ví dụ:


Mảng nhiều chiều

Mảng nhiều chiều có thể được mô tả là “mảng của các mảng”. Ví dụ: một mảng hai chiều có thể được hình dung như một bảng hai chiều bao gồm các phần tử, tất cả chúng đều có cùng một kiểu dữ liệu thống nhất.

jimmy đại diện cho một mảng bidimensional gồm 3 trên 5 phần tử thuộc loại int . Cú pháp C ++ cho điều này là:

   
  int jimmy [3] [5];  

và, ví dụ: cách tham chiếu phần tử thứ hai theo chiều dọc và thứ tư theo chiều ngang trong một biểu thức sẽ là:

   
  jimmy [1] [3]  

(hãy nhớ rằng chỉ số mảng luôn bắt đầu bằng 0).

Mảng nhiều chiều không giới hạn ở hai chỉ số (tức là hai chiều). Chúng có thể chứa nhiều chỉ số nếu cần. Mặc dù hãy cẩn thận: số lượng bộ nhớ cần thiết cho một mảng sẽ tăng theo cấp số nhân với mỗi kích thước. Ví dụ:

   
  char Kỷ [100] [365] [24] [60] [60];  

khai báo một mảng có phần tử kiểu char cho mỗi giây trong một thế kỷ. Con số này lên tới hơn 3 tỷ char ! Vì vậy, khai báo này sẽ tiêu tốn hơn 3 gigabyte bộ nhớ!

Cuối cùng, mảng nhiều chiều chỉ là một phần trừu tượng đối với các lập trình viên, vì các kết quả tương tự có thể đạt được với một mảng đơn giản, bằng cách nhân các chỉ số của nó:

  1 
2
  int jimmy [3] [5]; // tương đương với
int jimmy [15]; // (3 * 5 = 15)  

Với sự khác biệt duy nhất với mảng nhiều chiều, trình biên dịch sẽ tự động ghi nhớ độ sâu của từng chiều tưởng tượng. Hai đoạn mã sau tạo ra cùng một kết quả, nhưng một đoạn sử dụng mảng bidimensional trong khi đoạn mã kia sử dụng một mảng đơn giản:

Xem Thêm  Java ArrayList Add () - Làm cách nào để thêm giá trị vào ArrayList? - cách thêm vào danh sách mảng

mảng đa chiều mảng giả đa chiều

 #define WIDTH 5
#define CHIỀU CAO 3

int jimmy [HEIGHT] [WIDTH];
int n, m;

int main ()
{
  cho (n = 0; n & lt; HEIGHT; n ++)
    cho (m = 0; m & lt; WIDTH; m ++)
    {
      jimmy [n] [m] = (n + 1) * (m + 1);
    }
} 


 #define WIDTH 5
#define CHIỀU CAO 3

int jimmy [HEIGHT * WIDTH];
int n, m;

int main ()
{
  cho (n = 0; n & lt; HEIGHT; n ++)
    cho (m = 0; m & lt; WIDTH; m ++)
    {
      jimmy [n * WIDTH + m] = (n + 1) * (m + 1);
    }
} 



Không có đoạn mã nào trong số hai đoạn mã ở trên tạo ra bất kỳ đầu ra nào trên màn hình, nhưng cả hai đều gán giá trị cho khối bộ nhớ được gọi là jimmy theo cách sau:

Lưu ý rằng mã sử dụng các hằng số được xác định cho chiều rộng và chiều cao, thay vì sử dụng trực tiếp các giá trị số của chúng. Điều này giúp mã dễ đọc hơn và cho phép dễ dàng thực hiện các thay đổi trong mã ở một nơi.

Mảng nhiều chiều có thể được mô tả là “mảng của các mảng”. Ví dụ: một mảng hai chiều có thể được hình dung như một bảng hai chiều bao gồm các phần tử, tất cả chúng đều có cùng một kiểu dữ liệu thống nhất. Đại diện cho một mảng hai chiều gồm 3 trên 5 phần tử cùng loại. Cú pháp C ++ cho điều này là: và, ví dụ, cách tham chiếu phần tử thứ hai theo chiều dọc và thứ tư theo chiều ngang trong một biểu thức sẽ là: (hãy nhớ rằng chỉ số mảng luôn bắt đầu bằng 0). Mảng nhiều chiều không giới hạn ở hai chỉ số (tức là , hai kích thước). Chúng có thể chứa nhiều chỉ số nếu cần. Mặc dù hãy cẩn thận: số lượng bộ nhớ cần thiết cho một mảng sẽ tăng theo cấp số nhân với mỗi kích thước. Ví dụ: khai báo một mảng với một phần tử kiểu cho mỗi giây trong một thế kỷ. Con số này lên đến hơn 3 tỷ đồng! Vì vậy, khai báo này sẽ tiêu tốn hơn 3 gigabyte bộ nhớ! Cuối cùng, mảng nhiều chiều chỉ là một phần trừu tượng đối với các lập trình viên, vì các kết quả tương tự có thể đạt được với một mảng đơn giản, bằng cách nhân các chỉ số của nó: Với sự khác biệt duy nhất với mảng nhiều chiều , trình biên dịch tự động ghi nhớ độ sâu của từng kích thước tưởng tượng. Hai đoạn mã sau tạo ra cùng một kết quả chính xác, nhưng một đoạn sử dụng mảng bidimensional trong khi đoạn mã kia sử dụng một mảng đơn giản: Không đoạn mã nào trong số hai đoạn mã ở trên tạo ra bất kỳ đầu ra nào trên màn hình, nhưng cả hai đều gán giá trị cho khối bộ nhớ được gọi là jimmy theo cách sau: Lưu ý rằng mã sử dụng các hằng số được xác định cho chiều rộng và chiều cao, thay vì sử dụng trực tiếp các giá trị số của chúng. Điều này giúp mã dễ đọc hơn và cho phép dễ dàng thực hiện các thay đổi trong mã ở một nơi.

Mảng dưới dạng tham số

Tại một số điểm, chúng ta có thể cần truyền một mảng cho một hàm như một tham số. Trong C ++, không thể truyền trực tiếp toàn bộ khối bộ nhớ được biểu thị bởi một mảng tới một hàm dưới dạng một đối số. Nhưng những gì có thể được thông qua thay vào đó là địa chỉ của nó. Trên thực tế, điều này có tác dụng gần như tương tự và hoạt động nhanh hơn và hiệu quả hơn nhiều.

Để chấp nhận một mảng làm tham số cho một hàm, các tham số có thể được khai báo dưới dạng kiểu mảng, nhưng với dấu ngoặc trống, bỏ qua kích thước thực của mảng. Ví dụ:

   
  thủ tục void (int arg [])  

Hàm này chấp nhận một tham số kiểu “mảng của int ” được gọi là arg . Để chuyển đến hàm này, một mảng được khai báo là:

   
  int myarray [40];  

chỉ cần viết một cuộc gọi như thế này là đủ:

   
  thủ tục (myarray);  

Ở đây bạn có một ví dụ hoàn chỉnh:

  1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  // mảng dưới dạng tham số
#include & lt; iostream & gt;
sử dụng không gian tên std;

void printarray (int arg [], int length) {
  for (int n = 0; n & lt; length; ++ n)
    cout & lt; & lt; arg [n] & lt; & lt; '';
  cout & lt; & lt; '\N';
}

int main ()
{
  int firstarray [] = {5, 10, 15};
  int secondarray [] = {2, 4, 6, 8, 10};
  printarray (firstarray, 3);
  printarray (secondarray, 5);
}  
 5 10 15
2 4 6 8 10 

Trong đoạn mã trên, tham số đầu tiên ( int arg [] ) chấp nhận bất kỳ mảng nào có các phần tử thuộc kiểu int , bất kể độ dài của nó. Vì lý do đó, chúng tôi đã bao gồm một tham số thứ hai cho hàm biết độ dài của mỗi mảng mà chúng tôi truyền cho nó như là tham số đầu tiên của nó. Điều này cho phép vòng lặp for in ra mảng biết phạm vi để lặp lại trong mảng được truyền mà không vượt ra ngoài phạm vi.

Trong một khai báo hàm, cũng có thể bao gồm các mảng nhiều chiều. Định dạng cho tham số mảng ba chiều là:

   
  base_type [] [depth] [depth]  

Ví dụ: một hàm có mảng nhiều chiều làm đối số có thể là:

   
 thủ tục void (int myarray [] [3] [4])  

Lưu ý rằng các dấu ngoặc đầu tiên [] được để trống, trong khi các dấu ngoặc sau chỉ định kích thước cho các thứ nguyên tương ứng của chúng. Điều này là cần thiết để trình biên dịch có thể xác định độ sâu của từng kích thước bổ sung.

Theo một cách nào đó, việc chuyển một mảng dưới dạng đối số luôn làm mất một thứ nguyên. Lý do đằng sau là vì lý do lịch sử, các mảng không thể được sao chép trực tiếp, và do đó, những gì thực sự được chuyển qua là một con trỏ. Đây là một nguồn lỗi phổ biến đối với các lập trình viên mới vào nghề. Mặc dù sự hiểu biết rõ ràng về các con trỏ, được giải thích trong chương tới, sẽ giúp ích rất nhiều.

Tại một số thời điểm, chúng ta có thể cần truyền một mảng cho một hàm dưới dạng tham số. Trong C ++, không thể truyền trực tiếp toàn bộ khối bộ nhớ được biểu thị bởi một mảng tới một hàm dưới dạng một đối số. Nhưng những gì có thể được thông qua thay vào đó là địa chỉ của nó. Trong thực tế, điều này có tác dụng gần như tương tự, và nó là một hoạt động nhanh hơn và hiệu quả hơn nhiều. của mảng. Ví dụ: Hàm này chấp nhận một tham số kiểu “array of” được gọi. Để truyền đến hàm này, một mảng được khai báo là: chỉ cần viết một lệnh gọi như thế này là đủ: Ở đây bạn có một ví dụ hoàn chỉnh: Trong đoạn mã trên, tham số đầu tiên () chấp nhận bất kỳ mảng nào có các phần tử thuộc kiểu, bất kỳ chiều dài của nó. Vì lý do đó, chúng tôi đã bao gồm một tham số thứ hai cho hàm biết độ dài của mỗi mảng mà chúng tôi truyền cho nó như là tham số đầu tiên của nó. Điều này cho phép vòng lặp for in ra mảng biết phạm vi để lặp trong mảng được truyền vào mà không vượt ra ngoài phạm vi. Trong khai báo hàm, cũng có thể bao gồm các mảng nhiều chiều. Định dạng cho tham số mảng ba chiều là: Ví dụ: một hàm có mảng nhiều chiều làm đối số có thể là: Lưu ý rằng dấu ngoặc đầu tiên để trống, trong khi các dấu ngoặc sau chỉ định kích thước cho các kích thước tương ứng của chúng. Điều này là cần thiết để trình biên dịch có thể xác định độ sâu của từng thứ nguyên bổ sung. Theo một cách nào đó, việc chuyển một mảng làm đối số luôn làm mất một thứ nguyên. Lý do đằng sau là vì lý do lịch sử, các mảng không thể được sao chép trực tiếp, và do đó, những gì thực sự được chuyển qua là một con trỏ. Đây là một nguồn lỗi phổ biến đối với các lập trình viên mới vào nghề. Mặc dù sự hiểu biết rõ ràng về các con trỏ, được giải thích trong chương tới, sẽ giúp ích rất nhiều.

Mảng thư viện

Các mảng được giải thích ở trên được triển khai trực tiếp như một tính năng ngôn ngữ, kế thừa từ ngôn ngữ C. Chúng là một tính năng tuyệt vời, nhưng bằng cách hạn chế bản sao của nó và dễ dàng phân rã thành con trỏ, chúng có thể bị tối ưu hóa quá mức.

Để khắc phục một số vấn đề này với các mảng tích hợp sẵn trong ngôn ngữ, C ++ cung cấp một kiểu mảng thay thế làm vùng chứa tiêu chuẩn. Nó là một mẫu kiểu (thực tế là một mẫu lớp) được xác định trong tiêu đề & lt; array & gt; .

Vùng chứa là một tính năng của thư viện nằm ngoài phạm vi của hướng dẫn này và do đó lớp này sẽ không được giải thích chi tiết ở đây. Chỉ cần nói rằng chúng hoạt động theo cách tương tự như các mảng tích hợp, ngoại trừ việc chúng cho phép sao chép (một hoạt động thực sự tốn kém để sao chép toàn bộ khối bộ nhớ và do đó sử dụng cẩn thận) và chỉ phân rã thành con trỏ khi rõ ràng được yêu cầu làm như vậy (thông qua data thành viên của nó).

Chỉ là một ví dụ, đây là hai phiên bản của cùng một ví dụ sử dụng mảng tích hợp sẵn ngôn ngữ được mô tả trong chương này và vùng chứa trong thư viện:

ngôn ngữ tích hợp mảng thư viện arraycontainer thư viện

 #include & lt; iostream & gt;

sử dụng không gian tên std;

int main ()
{
  int myarray [3] = {10,20,30};

  cho (int i = 0; i & lt; 3; ++ i)
    ++ myarray [i];

  cho (int elem: myarray)
    cout & lt; & lt; elem & lt; & lt; '\N';
} 


 #include & lt; iostream & gt;
#include & lt; mảng & gt;
sử dụng không gian tên std;

int main ()
{
  mảng & lt; int, 3 & gt; myarray {10,20,30};

  for (int i = 0; i & lt; myarray.size (); ++ i)
    ++ myarray [i];

  cho (int elem: myarray)
    cout & lt; & lt; elem & lt; & lt; '\N';
}



Như bạn có thể thấy, cả hai loại mảng đều sử dụng cùng một cú pháp để truy cập các phần tử của nó: myarray [i] . Ngoài ra, sự khác biệt chính nằm ở việc khai báo mảng và việc bao gồm một tiêu đề bổ sung cho. Cũng lưu ý cách dễ dàng truy cập kích thước của.

Các mảng được giải thích ở trên được triển khai trực tiếp dưới dạng một tính năng ngôn ngữ, được kế thừa từ ngôn ngữ C. Chúng là một tính năng tuyệt vời, nhưng bằng cách hạn chế bản sao của nó và dễ dàng phân rã thành con trỏ, chúng có thể bị tối ưu hóa quá mức. Nó là một kiểu mẫu (thực tế là một mẫu lớp) được định nghĩa trong headerContainers là một tính năng thư viện nằm ngoài phạm vi của hướng dẫn này, và do đó lớp sẽ không được giải thích chi tiết ở đây. Chỉ cần nói rằng chúng hoạt động theo cách tương tự như các mảng tích hợp, ngoại trừ việc chúng cho phép sao chép (một hoạt động thực sự tốn kém để sao chép toàn bộ khối bộ nhớ và do đó sử dụng cẩn thận) và chỉ phân rã thành con trỏ khi rõ ràng được yêu cầu làm như vậy (bằng thành viên của nó). Chỉ như một ví dụ, đây là hai phiên bản của cùng một ví dụ sử dụng mảng tích hợp ngôn ngữ được mô tả trong chương này và vùng chứa trong thư viện: Như bạn có thể thấy, cả hai các loại mảng sử dụng cùng một cú pháp để truy cập các phần tử của nó:. Ngoài ra, sự khác biệt chính nằm ở việc khai báo mảng và việc bao gồm một tiêu đề bổ sung cho. Cũng lưu ý cách dễ dàng truy cập kích thước của


Xem thêm những thông tin liên quan đến chủ đề mảng trong c ++ là gì

C++ 20: Mảng một chiều

  • Tác giả: thân triệu
  • Ngày đăng: 2019-06-30
  • Đánh giá: 4 ⭐ ( 2637 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hướng dẫn lập trình C++ cho người mới bắt đầu.Lập trình C++ đầy đủ và cập nhật. Học lập trinh C++ cho tất cả mọi người. Mảng một chiều trong ngôn ngữ lập trình C++. thân triệu channel-let’s grow together!

    Code mẫu: https://github.com/thantrieu/C-Tutorial/blob/master/Bai20.cpp

Mảng trong Ngôn ngữ C

  • Tác giả: vietjack.com
  • Đánh giá: 5 ⭐ ( 5363 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mảng trong C – Học C cơ bản và nâng cao theo các bước đơn giản và ví dụ dễ hiểu bắt đầu từ cơ bản về C, Toán tử, kiểu dữ liệu, hàm, vòng lặp, mảng, con trỏ, cấu trúc, chuỗi, lệnh, input và output, quản lý bộ nhớ, bộ tiền xử lý, điều khiển luồng etc.

Mảng trong C là gì? Cách khởi tạo, khai báo và gán giá trị cho mảng trong C

  • Tác giả: laptrinhcanban.com
  • Đánh giá: 3 ⭐ ( 8640 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bạn có đang sử dụng mảng trong C không? Mảng trong C, hay còn gọi là kiểu mảng trong C rất tiện lợi khi chúng ta cần xử lý một lượng lớn dữ liệu cùng loại. Hãy cùng tìm hiểu mảng trong C là gì, mảng t

Mảng là gì? Cách sử dụng mảng trong lập trình C

  • Tác giả: khuenguyencreator.com
  • Đánh giá: 3 ⭐ ( 5192 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài này chúng ta sẽ học cách sử dụng mảng 1 chiều và mảng 2 chiều trong lập trình c. Một mảng được sử dụng để lưu trữ tập hợp dữ liệu, nhưng nó rất hữu

[C Programming] Mảng là gì

  • Tác giả: www.codelean.vn
  • Đánh giá: 5 ⭐ ( 6688 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: CodeLean.vn là nơi chia sẻ kiến thức của những người học, làm và dạy trong lĩnh vực công nghệ thông tin.

Học lập trình C cơ bản

  • Tác giả: vncoder.vn
  • Đánh giá: 4 ⭐ ( 4128 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mảng (array) trong C là một tập hoặc một nhóm các phần tử (dữ liệu) có kiểu dữ liệu đồng nhất(tương tự). Các phần tử của mảng được lưu trong các vùng nhớ liên tiếp.

Mảng (array) trong C

  • Tác giả: viettuts.vn
  • Đánh giá: 4 ⭐ ( 8371 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mảng (array) trong C là một tập hoặc một nhóm các phần tử (dữ liệu) có kiểu dữ liệu đồng nhất(tương tự). Các phần tử của mảng được lưu trong các vùng nhớ

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php