Trang

Thursday, June 12, 2014

STD::VECTOR - STD::VECTOR::PUSH_BACK

vector là một kiểu cấu trúc dữ liệu  được xây dựng sẵn trong C++  được dùng để lưu trữ và có chức năng tương tự như mảng. Tuy nhiên vector có một số ưu điểm sau:
- Cấp phát động và không giới hạn về số lượng phần tử.
- Có các phương thức (hàm) hỗ trợ như : lấy số lượng phần tử , chèn, xóa phần tử …
Ví dụ : sử dụng một vector có các phần tử kiểu int
Ghi chú : Để thêm phần tử vào vector ta  dùng phương thức push_back(value) . Để truy xuất ta dùng hình thức tương tự như mảng một chiều myVector[index] 

Để tiện học tập và tra cứu, mỗi hàm mình viết thành một bài riêng .Các bạn chịu khó ấn vào tên hàm tương ứng để xem hướng dẫn   ;-) ) 
Cách khai báo vector : Khai báo vector  :-D
Các hàm truy cập giá trị  các phần tử của vector: 
Toán tử [ ] Truy cập trực tiếp các phần tử vector thông qua toán tử [ ]
front Trả về giá trị của phần tử đầu tiên trong của vector
back Trả về giá trị của phần tử cuối cùng trong của vector
Các hàm truy cập địa chỉ các phần tử của vector: 
iteratorTruy cập các phần tử của vector thông qua địa chỉ 
begin Truy cập địa chỉ của phần tử đầu tiên của vector
endTruy cập địa chỉ của phần tử đầu tiên của vector
Các hàm thay đổi các phần tử của vector: 
push_backThêm một phần tử vào cuối dãy của vector
pop_backLoại bỏ một phần tử ở cuối dãy ra khỏi vector
insertThêm một hay nhiều phần tử vào vector ở vị trí bất kì
eraseXóa một hay nhiều phần tử ra khỏi vector ở vị trí bất kì
Các hàm lấy các thuộc tính của vector: 
 size  trả về số phần tử trong mảng 
 empty Trả về giá trị true nếu vector không có phần tử nào


push_back(value) có chức năng thêm một phần tử vào cuối vector . Ví dụ: dãy hiện tai tại là {1,2,3,4}, khi thêm vào cuối dãy thì ta được {1,2,3,4,5} 
push_back(value) là phương thức dùng đề gán một giá trị vào vector, điểm này khác so với mảng. Cụ thể, ta không thể thực hiện gán giá trị trực tiếp vào các phần tử của vector vì ban đầu ta vẫn chưa tạo vùng nhớ cho các phần tử của vector. Do đó, ta cần dúng phương thức push_back(value) để cấp phát vùng nhớ và gán giá trị vào vùng nhớ.
Đoạn code sau khi Bulid sẽ không phát hiện lỗi nhưng khi Run sẽ có lỗi “truy cập vào vùng nhớ không tồn tại” : 
Đoạn code bên dưới đã sửa lại lỗi phía trên, đồng thời dùng hàm push_back(value) để  thêm một phần từ có giá trị 10 và dãy {0,1,2,3,4,5,6,7,8,9}
Tham khảo các hàm  hữu ích khác của vector   ;-)

std::vector::front
Hình thức:  int front() , string front() , double front() …. 
Chức năng: Trả về giá trị đầu tiên của phần tử trong vector 

Ví dụ: 
 std::vector::insert
Hình thức và chức năng của  hàm insert :
 void insert( iterator index, datatype value)  : thêm 1 phần tử có giá trị value vào vị trí index.
void insert( iterator index, int n ,  datatype value)  : thêm n phần tử có giá trị value vào vị trí index.
Lưu ý: ví trí index ở đây là một iterator (tham khảo thêm về iterator)

Ví dụ: 
 output: 
Cac phan tu sau khi insert: 100 200 200
 std::vector::erase
Hình thức: 
void erase (iterator position)  : xóa một phần tử ở vị postion.
void erase (iterator first , iterator last) : xóa các phần tử liên tiếp từ vị trí first đến vị trí liền trước với  last .
Lưu ý: Hàm erase có tham số là các biến địa chỉ iterator ( kham thảo thêm vềiteratior

Ví dụ: 

Output: 
100 400 500 600 700 800 900

std::vector::iterator
iterator được hiểu như là một kiểu đia chỉ bộ nhớ, thay vì truy xuất các phần tử vector thông qua chỉ số 0,1,2… ta có thể truy xuất thông qua các địa chỉ vùng nhớ của các phần tử này. 
iterator được sử dụng để truy xuất mảng, sử dụng trong các hàm insert , erase ,..
Hình thức: ví dụ khai báo một iterator  có tên  là it cho một  vector kiểu int : vector<int> :: iterator it;


Ví dụ: 

STD::VECTOR::BEGIN

Hình thức: iterator begin()
Chức năng: trả về iterator (địa chỉ) của phần tử đầu tiên trong vector.

Ví dụ: 

Output: 
1 2 3 4 5 

No comments:

Post a Comment