Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 53

LỚP DỰNG SẴN

ARRAY VÀ
VECTOR
THÀNH VIÊN
Nguyễn Đức Tú – 21521612
Trần Quang Huy – 21520938
Võ Đông Thành – 21520457
Phan Hoàng Linh – 21521079
Nguyễn Tuấn Anh - 21520580

2
1.
LỚP DỰNG SẴN
ARRAY
“Mảng 1 chiều là mảng tĩnh, và nó có 1 số khuyết điểm:
mảng trở thành con trỏ và mất thông tin chiều dài khi
truyền vào hàm, không có nhiều hàm hỗ trợ sẵn.
Để giải quyết những vấn đề về quản lý và sử dụng mảng
tĩnh, thư viện chuẩn C++ đã cung cấp lớp std::array
được khai báo trong thư viện <array> thuộc namespace
std.

4
Để sử dụng thư viện array ta chỉ cần khai báo:

Khai báo biến có kiểu dữ liệu array:


array < <kiểu_dữ_liệu>,
<số_lượng_phần_tử> > <tên_biến>;
Khởi tạo giá trị cho toàn bộ giá trị trong mảng:
<tên_mảng>.fill(<giá_trị>);

5
Ví dụ: Khởi tạo giá trị mảng A có kiểu dữ liệu int
gồm 10 phần tử, các phần tử trong mảng đều là 5
Kết quả xuất ra màn hình
là:

6
KHÁI NIỆM ITERATORS:

Iterator là một con trỏ được sử dụng để đại diện cho một
phần tử nào đó. Được sử dụng đại diện cho các biến được
trỏ đến để thực hiện các thao tác thêm, sửa, xóa,...

7
CÁC HÀM THÔNG DỤNG :
1. Hàm begin:
Đưa iterator về phần tử đầu tiên trong array:
Cú pháp: <tên_mảng>.begin();

8
2. Hàm end:
Đưa iterator về sau phần tử cuối cùng trong array:
Cú pháp:
<tên_mảng>.end();

9
Ví dụ: Nhập một mảng gồm 6 phần tử. Sử dụng con
trỏ xuất giá trị đầu tiên và giá trị cuối cùng của
mảng.
Kết quả xuất ra màn hình
là:

10
3. Hàm rbegin:
Là reverse iterator đưa iterator về phần tử cuối cùng trong array:
Cú pháp:
<tên_mảng>.rbegin();

11
4. Hàm rend:
Là reverse iterator đưa iterator về trước phần tử đầu tiên trong
array:
Cú pháp:
<tên_mảng>.rend();

12
5. Hàm front:
Dùng để truy xuất phần tử đầu tiên trong mảng:
Cú pháp: <tên_mảng>.front();

13
6. Hàm back:
Dùng để truy xuất phần tử cuối cùng trong mảng:
Cú pháp: <tên_mảng>.back();

14
Ví dụ: Cho mảng A = {2, 5, 1, 6, 4, 3} , xuất giá trị
đầu và giá trị cuối cùng của mảng.tiên

Kết quả xuất ra màn hình là:

15
7. Toán tử [ ]:
Dùng để truy xuất phần tử trong mảng:
Cú pháp: <tên_mảng>[<vị_trí_phần_tử_cần_truy_xuất>];
Toán tử [] không kiểm tra phạm vi của mảng.

16
8. Hàm at:
Dùng để truy xuất phần tử trong mảng:
Cú pháp: <tên_mảng>.at(<vị_trí_phần_tử_cần_truy_xuất>);
Hàm at tự động kiểm tra phạm vi của mảng.

17
Ví dụ: Cho mảng A= {10, 20, 30, 40, 50, 60, 70}.
Thực hiện các yêu cầu sau:

a/ Dùng toán tử [] xuất các phần tử của mảng ra màn hình


b/ Thay đổi giá trị phần tử thứ 2 của mảng và xuất mảng ra
màn hình
c/ Sử dụng hàm at để xuất phần tử thứ 3 ra màn hình

18
a/

19
b/ và c/

Kết quả :

20
9. Hàm empty:
Kiểm tra mảng 1 chiều trong đối tượng thuộc class array tạo
ra có rỗng hay không:
Cú pháp: <tên_mảng>.empty();
Phương thức trả về true nếu mảng có số lượng phần tử bằng
0.

21
Ví dụ: Cho mảng A có 5 phần tử và
mảng B có 0 phần tử. Kiểm tra lần lượt
từng mảng, nếu mảng rỗng xuất ra màn
hình thông báo, ngược lại xuất ra màn
hình kích thước mảng đó.

22
Kết quả:

23
10. Hàm size:
Xem số lượng phần tử mà array có thể chứa:
Cú pháp: <tên_mảng>.size();
Phương thức sẽ trả về số lượng phần tử mà chúng ta đã khai
báo từ đầu.

24
11. Hàm max_size:
Xem số lượng phần tử tối đa mà array có thể chứa:
Cú pháp: <tên_mảng>.max_size();

25
Ví dụ: So sánh hàm size và hàm max_size:

Kết quả:

26
12. Hàm swap:
Hoán đổi nội dung của array này với array khác có cùng
kích thước và kiểu dữ liệu
Cú pháp: <tên_mảng_1>.swap(<tên_màng_2>);

27
Ví dụ: Cho 2 mảng
A = {0, 2, 4, 6, 8}
B = {1, 3, 5, 7, 9}
Thay đổi nội dung mảng A và mảng B,
xuất hai màng ra màn hình

28
Kết quả:

29
2.
VECTOR
Không giống như array (mảng), chỉ một số giá trị nhất định có thể được
lưu trữ dưới một tên biến duy nhất. Vector trong C++ giống dynamic
array (mảng động) nhưng có khả năng tự động thay đổi kích thước khi
một phần tử được chèn hoặc xóa tùy thuộc vào nhu cầu của tác vụ được
thực thi, với việc lưu trữ của chúng sẽ được vùng chứa tự động xử lý.

31
Một số điểm nổi trội của Vector
-Bạn không cần phải khai báo kích thước của mảng ví dụ int
A[100]…, vì vector có thể tự động nâng kích thước lên.

-Nếu bạn thêm 1 phần tử vào vector đã đầy rồi, thì nó sẽ tự động
tăng kích thước của nó lên để dành chỗ cho giá trị mới này.

-Vector còn giúp cho bạn biết số lượng các phần tử mà bạn đang
lưu trong đó.
-Dùng số phần tử âm vẫn được trong vector (A[-6], A[-9]), rất
tiện trong việc cài đặt các giải thuật.

32
Khởi tạo vector trong C++

- Khởi tạo có giá trị ban đầu:

vector<kiểu giá trị> <tên vector> = {các giá trị};

- Khởi tạo với số lượng phần tử cho trước:


vector<kiểu giá trị> <tên vector> (số lượng phần tử);

Các hàm của vector trong C++

33
Các hàm của vector trong C++

Begin(): đưa Iterator về phần đầu tiên trong vector.

Vì là Iterator nên phải khai báo thêm cho Iterator


+ Cú pháp: vector<kiểu giá trị>::iterator <tên iterator>
= <tên vector>.begin();

34
2. End( ):
Đưa Iterator về SAU PHẦN TỬ CUỐI CÙNG của
vector
+ Cú pháp: vector<kiểu giá trị>::iterator <tên iterator> =
<tên vector>.end();
+ Nếu muốn iterrator được đưa về phần tử cuối cùng
của vector thì dùng it=v1.end()-1;
1 2 3 4 5 6 NULL
begin() end()

35
VD:

36
2. rbegin( ):
Là reverse Iterator đưa Iterator về phần tử cuối
cùng của vector.
+ Cú pháp: vector<kiểu giá trị>::reverse_iterator <tên
iterator> = <tên vector>.rbegin();
- Rend(); là reverse Iterator đưa Iterator về phần tử
TRƯỚC PHẦN ĐẦU TIÊN của Iterator
- + Cú pháp: vector<kiểu giá trị>::reverse_iterator <tên
iterator> = <tên vector>.rend();

rend() rbegin()

37
VD:

38
3.size( ): trả về số lượng giá trị đang sử dụng trong
vector

4.max_size: trả về số phần tử tối đa mà vector có thể


chứa

5.empty( ): kiểm tra xem vector có rỗng hay không,


nếu có thì trả về true, không thì trả về false

39
VD:

40
6. at(n):
Trả về giá trị của phân tử thứ n trong vector
+ Cú pháp: <tên vector>.at(n);
+ Có thể sử dụng phương pháp khác thường được sử dụng trong mảng là
<tên vector>[n];
VD:

41
7. data( ):
Trả về con trỏ trỏ vào phần tử đầu tiên của vector
+ Cú pháp: <tên vector>.data();
VD:

42
8. front( ) và back( ):
+ front(): trả về giá trị đầu tiên của vector
+ back(): trả về giá trị cuối cùng của vector
+ Cú pháp: <tên vector>.front() ; và <tên vector>.back();
+ VD:

43
9. push_back( ) và pop_back( ):
-push_back(): thêm 1 phần tử vào vị trí cuối cùng của vector.
-pop_back(): xóa phần tử ở vị trí cuối cùng của vector
+ Cú pháp: <tên vector>.push_back(tên của phần tử thêm vào cuối); và
<tên vector>.pop_back();
+ VD:

44
45
10. insert( ) :

Chèn thêm các phần tử khác vào vector


+ Có thể chèn vào đầu, cuối hoặc các vị trí bất kỳ
+ Có thể chèn 1 mảng khác vào trong vector
+ Việc chèn có thể cần sử dụng iterator

46
10. insert( ) :

Cú pháp:
+ Chèn 1 phần tử: <tên vector>.insert(vị trí, giá trị);
+ Chèn nhiều phần tử: <tên vector>.insert(vị trí, số
lượng cần thêm, giá trị);
+ Chèn mảng vào vector: <tên vector>.insert(vị trí, vị
trí bắt đầu muốn chèn của mảng, vị trí muốn kết thúc
chèn);
+ Nếu dùng iterator thì phải thay vị trí bằng iterator

47
48
11. erase( ) :
Dùng để xóa 1 hoặc nhiều phần tử trong vector
+ Giống với insert() có thể sử dụng iterator.
Cú pháp:
+ nếu xóa 1 phần tử : <tên vector>.erase(vị trí) ;
+ nếu xóa nhiều phần tử : <tên vector>.erase(vị trí bắt đầu, vị trí bắt
đầu+số giá trị muốn xóa);
VD:

49
50
12. Swap và clear :
+ swap() : dùng để hoán đổi giá trị các phần tử trong 2 vector khác nhau
và vẫn hoán đổi được nếu 2 vector khác nhau về kích thước
+ clear() : xóa hết tất cả các giá trị có trong
Cú pháp :
+ swap : <tên vector 1>.swap(tên vector 2) ;
+ clear: <tên vector>.clear();
VD:

51
52
CẢM MƠN CÁC BẠN ĐÃ CHÚ Ý LẮNG NGHE

You might also like