Problem

1/1

Mảng động: Bắt đầu

Theory Click to read/hide

Mảng động
Trong các khóa học trước về mảng, chúng ta đã xem xét việc tạo một mảng như thế này:
 
const int Nmax = 1000; int A[Nmax]; hoặc này: intA[1000];
Phương thức này tạo một mảng tĩnh. Một nhược điểm là không thể thay đổi kích thước và kiểu của các phần tử mảng trong khi chương trình đang chạy. 
Trong ví dụ trên, một mảng tĩnh gồm 1000 phần tử được tạo. Nghĩa là, một vùng được cấp phát trong bộ nhớ để lưu trữ 1000 phần tử kiểu int (một mảng gồm 1000 phần tử kiểu int). Địa chỉ của phần đầu của mảng được lưu trong biến  A. Nếu bạn cần xử lý một mảng hơn 1000 phần tử, bạn sẽ phải thay đổi mô tả và biên dịch lại chương trình. Khi làm việc với các mảng nhỏ, phần lớn bộ nhớ được phân bổ cho một mảng tĩnh sẽ bị lãng phí.

Để sử dụng hiệu quả bộ nhớ máy tính, cần phải phân bổ động. Nói cách khác, bộ nhớ cho các đối tượng nên được cấp phát trong quá trình thực thi chương trình khi cần (tạo đối tượng mới).

Trong C++, các thao tác  mới và xóa được thiết kế để phân bổ động bộ nhớ máy tính.  Hoạt động mới  cấp phát bộ nhớ từ vùng bộ nhớ trống và thao tác xóa giải phóng bộ nhớ đã cấp phát. 
 
Ví dụ về tạo và xóa biến động
int *A = int mới; // tạo đối tượng kiểu int *A = 15; // khởi tạo đối tượng thông qua con trỏ (*) // khởi tạo có thể được thực hiện ngay lập tức // khi khai báo một đối tượng động int *B = new int(25); cout << *Một << " " << *B; // xuất giá trị theo con trỏ xóaA; // giải phóng bộ nhớ được cấp phát xóa B; Thao tác new tạo một đối tượng thuộc loại nhất định, cấp phát bộ nhớ cho đối tượng đó và trả về một con trỏ thuộc loại chính xác tới vị trí bộ nhớ đã cho. Ví dụ: nếu không thể cấp phát bộ nhớ, nếu không có vùng trống, thì một con trỏ null được trả về, nghĩa là con trỏ sẽ trả về giá trị 0. Có thể cấp phát bộ nhớ cho bất kỳ loại dữ liệu nào: int float , doublechar v.v.

Theo cách tương tự, trong C++, bạn có thể tạo một mảng động sẽ sử dụng cấp phát bộ nhớ động. Kích thước của một mảng như vậy, có thể được sử dụng trong khi chương trình đang chạy, chẳng hạn như từ bàn phím, để tạo các biến động.
 
Cú pháp trong C
intN; scanf("%d", &N); int *mas = malloc (sizeof(int) * N); // sau đó thay đổi kích thước mảng // được sử dụng bởi realloc. ... miễn phí (mas); // giải phóng bộ nhớ đã cấp phát
Theo cú pháp C++
intN; cin>> N; int*A = int mới[N]; // để thay đổi kích thước của mảng, bạn có thể // truyền dữ liệu sang mảng khác và xóa mảng cũ ... xóa []mas; // giải phóng bộ nhớ đã cấp phát // dấu ngoặc vuông cho biết // rằng chúng tôi đang giải phóng bộ nhớ từ bên dưới mảng

Problem

Bạn được cung cấp một dãy số nguyên. Viết chương trình tạo một mảng và viết một chuỗi vào mảng đó hai lần liên tiếp.
 
Đầu vào 
Số đã cho đầu tiên N — số phần tử trong dãy (1<= N <= 100). Sau đó, các số N được viết cách nhau bằng dấu cách.
 
Đầu ra 
Cần phải xuất ra một mảng bao gồm một chuỗi trùng lặp.
 
Ví dụ
<đầu>
# Đầu vào Đầu ra
1 3
1 2 3
1 2 3 1 2 3
Write the program below
#include <iostream>

using namespace std;

main()
{
  int N;
  cin >> N;
        
 for( int i = 0 ; i < 2*N; i ++ )
  {
  	cout << A[i] << " ";
  }	
  
}        

     

Program check result

To check the solution of the problem, you need to register or log in!