C++ STL: Sử dụng List
Chào mừng các bạn đến với chủ đề: Lập trình C++ STL.
Bài viết này chúng ta tìm hiểu cách sử dụng list trong STL
Về cơ bản list cũng là một loại trong nhóm STL Container cùng với vector, được sử dụng để lưu trữ dữ liệu.
List khác biệt với vector ở điểm như sau:
+ List không thể truy xuất vào một phần tử ngẫu nhiên như vector, tức là nó không có hàm list::at(i) như vector.
+ List có thể ưu điểm hơn vector ở chỗ, nó có thể đẩy dữ liệu vào hai đầu, và đẩy dữ liệu ra cũng ở hai đầu.
Để sử dụng được list, chúng ta sẽ phải gọi thư viện
#include<list>
1. Gán dữ liệu cho list, hoặc một số lượng dữ liệu giống nhau cho list
#include <list> void main() { std::list<int> data_list; data_list.assign(5, 100); getch(); return; }
2. Đẩy dữ liệu vào và ra.
Sử dụng hai hàm cơ bản là push_back và pop_back, list hỗ trợ thêm hai hàm nữa, đó là push_front và pop_front cho phép
chúng ta có thể đẩy dữ liệu vào trước các element đang có sẵn trong list
Ngoài ra, theo tiêu chuẩn c++ 11. Có hai hàm tương tự đó là: emplace_back và emplace_front
#include <list> void main() { std::list<int> data_list; data_list.push_back(100); data_list.push_front(90); data_list.push_back(110); data_list.push_back(120); data_list.emplace_front(70); data_list.emplace_back(200); _getch(); return; }
2. Lấy length của phần tử, phần tử đầu và cuối
int size = data_list.size(); int value1 = data_list.front(); int value2 = data_list.back();
3. Kiểm tra list có dữ liệu hay trống, xóa phần tử theo giá trị
#include <list> void main() { std::list<int> data_list; data_list.push_back(100); data_list.push_front(90); data_list.push_back(110); data_list.push_back(120); bool is_empty = data_list.empty(); data_list.remove(120); getch(); return; }
4. Xóa phần tử theo một điều kiện nào đó.
Ví dụ bạn có một list các giá trị.
Bạn muốn remove các giá trị thỏa mãn điều kiện nào đó.
Sử dụng hàm remove_if
#include<list> #include <string> using namespace std; bool value_less_twenty(const int val){return (val < 20);} int main() { std::list<int> data_list; data_list.push_back(11); data_list.push_front(21); data_list.push_back(31); data_list.push_back(41); data_list.push_back(7); data_list.push_back(25); //before: list have 11 21 31 41 7 25 data_list.remove_if(value_less_twenty); //Then remove // 21 31 41 25 _getch(); return 0; }