Video C++ Bài 40 - Cấp phát động

#Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây :
#Thông tin về khóa học xem tại đây :

-Sự khác biệt giữa 2 khóa học cũ và mới :
+Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả.
+Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại… Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học cũ giúp đỡ việc lắng nghe và hiểu được tốt hơn.

Chào anh @ltd!!! Em nên dùng mảng đã được cấp phát vùng nhớ trước hay là cho nó cấp phát động.
VD:

//Mảng được cấp phát bộ nhớ
#include <iostream>
using namespace std;

int main()
{
	int iSoPhanTu;
	int arrMang[100];
	cout << "Nhap so phan tu: ";
	cin >> iSoPhanTu;
	for (int i = 0; i < iSoPhanTu; i++)
	{
		arrMang[i] = i;
		cout << arrMang[i] << endl;
	}
	return 0;
}

Hay em nên dùng:

//Cấp phát động
#include <iostream>
using namespace std;

int main()
{
	int iSoPhanTu;
	cout << "Nhap so phan tu: ";
	cin >> iSoPhanTu;
	int *arrMang = new int [iSoPhanTu];
	for (int i = 0; i < iSoPhanTu; i++)
	{
		arrMang[i] = i;
		cout << arrMang[i] << endl;
	}
	delete[] arrMang;
	return 0;
}

mỗi cái đều có điểm mạnh và điểm yếu cả :smiley: tùy trường hợp mà sử dụng thôi

2 Likes

@hungnm03061996 Nếu em biết chắc chắn số lượng phần tử của mảng, em sử dụng mảng như ví dụ 1

Nếu em “không biết chắc chắn” số lượng phần tử của mảng, em sử dụng cấp phát động như ví dụ 2.

Lý do là vì “cấp phát động” có thể cấp phát vùng nhớ tại thời điểm mình cần. Cấp phát tĩnh, chỉ có thể cấp một số lượng phần tử xác định tại thời điểm code.

3 Likes

cấp phát động thì được cái là quản lý vùng nhớ, tức là cấp phát vừa đủ và giải phóng. nhưng bù lại thì chương trình cũng phải cho nó load mảng động đó (mình không biết diễn tả như nào) :smiley: bạn có thể test bằng cách cấp phát một mảng động và pause system. mở cái task manager lên theo dõi thì thấy nó load ram nhiều hơn khi dùng tĩnh :smiley:

2 Likes

Anh ơi, sao em làm cái ví dụ cũng như thế mà vẫn được anh nhỉ ? (có lẽ do compiler?)

Bình thường giải thuật em vẫn làm thế này

int n;
cin >> n;
int A[n];

Mà theo hướng dẫn của anh thì delete luôn phải nằm dưới cùng phải không anh ?

Cấp phát xong mới có cái để delete.

Ý em là phải để dưới cuối, khi không làm nữa mới phải delete phải không ?

sao e bôi đen câu lệnh rồi nhấn chuột phải nó mất bôi đen làm sao sửa được lỗi này vậy a?

Tức là sao nhỉ? Em click chuột phải ở đâu? Bôi đen câu lệnh click chuột phải để làm gì?

e bôi đen câu lệnh để tạo hàm, ko thấy được chữ refactor -> Extract Method

Phải cài Visual Assist X mới có cái này. Nhưng bây giờ dùng bản 2013 đi, cái này cũ rồi :slight_smile:

e cài visual assist X rồi, thấy chữ Refactor -> Extract Method luôn rồi, nhưng nó vẫn bị lỗi, e bôi đen 2 3 dòng lệnh rồi lick chuột phải thì nó mất đánh dấu bôi đen nên e ko chọn Refactor -> Extract Method được

Click chuột phải lên chỗ được bôi đen thì sao?

ũa bôi từ dưới lên thì lại được, e hết thắc mắc rùi ạ :v

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?