List &DataContruct &Alogrithm &List &List_C++

List

  1. Định nghĩa
    1. Giới thiệu: Bài trước chúng ta đã biết về DS liên kết- LinkedList và cái đặt nó bằng C/C++ . Tuy nhiên việc cài đặt nó thì khá là dài dòng và mất thời gian, nay mình xin giới thiệu với các bạn 1 Cấu trúc dữ liệu tương tự LinkedList được cài đặt sẵn trong thư viện STL của C++ đó là List
    2. Thư viện STL viết tắt của Standard Template Library, là bộ thư viện chuẩn của C++, STL cung cấp các lớp cài đặt sẵn, cho phép thao tác với các kiểu dữ liệu cơ bản cũng như các kiểu dữ liệu tự định nghĩa, việc thành thạo sử dụng thư viện STL sẽ giúp bạn tiếp kiệm thời gian trong lập trình.
    3. Std::List : là 1 container nằm trong bộ thư viện STL của C++. Containner hiểu đơn giản là 1 cấu trúc dữ liệu, 1 cách tổ chức dữ liệu.
    4. Để có thể sử dụng List bạn cần khai báo thư viện STL và Lớp Containner List thông qua 2 dòng lệnh sau:
          #include< list > // sử dụng lớp list
          using namespace std; // câu lệnh quen thuộc khi viết C++,
          //giờ b biết ý nghĩa của nó là sử dụng thư viện STL rồi đó
                  
  2. Khai báo - Contructor
    1. Cú pháp: list< kieu_du_lieu > ten_bien;
      VD: list< int > myList; // khai bao 1 list có tên myList với kiểu số nguyên
    2. Ngoài ra còn ta còn có 1 số Contructor khác được định nghĩa sẵn:
          // default list
          list < int > myList; // empty list
          // khởi tạo List có 4 phần tử, các phần tử này được gán giá trị mặc định
          list < int > myList(4); // 0 0 0 0
          // khởi tạo List có 4 phần từ, các phần tử được gán giá trị
          list < int > myList(4,50); // 50 50 50 50
          // khở tạo 1 list từ việc copy giá trị của list khác
          list < int > myList(4,50); 50 50 50 50
          list < int > copymyList(myList); // 50 50 50 50
              
  3. Các hàm hay sử dụng với list - Functions with List
    1. bool empty(); // trả về true nếu rỗng và ngược lại
    2. int size(); // trả về kích thước của List
    3. void push_back(value); // thêm value vào cuối List, value có thể là giá trị or tên biến
    4. void push_front(value); // thêm value vào đầu List
    5. void pop_back(); // xóa phần tử cuối cùng khỏi List
    6. void pop_front(); // xóa phần tử đầu tiên khỏi List
    7. iterator là một đối tượng có thể đi qua (iterate over) một container class mà không cần biết trật tự các phần tử bên trong mảng. Iterator còn là một cách để truy cập dữ liệu bên trong các container. Đơn giản nó là 1 con trỏ mà trỏ tới 1 phần tử trong mảng
      Ta có 1 số toán tử liên quan đến iterator:
      - Operator* : trả về giá trị mà iterator đang trỏ tới
      - Operator++ : chuyển tới phần tử tiếp theo
      - Operator-- : chuyển tới phần tử phía trước
      - Operator== != : so sánh tương đối bằng hay khác giữa 2 iterator
      - Operator= : gán vị trí mà iterator trỏ đến

      Ta có 2 hàm trả về iterator hay dùng để gán vị trí cho iterator
      - iterator begin(); //trả về iterator trỏ tới phần tử đầu tiên của list
      - iterator end();> //trả về iterator trỏ tới phần tử cuối cùng của list
    8. iterator erase (iterator position); // xóa phần tử có vị trí position trong dãy
      iterator erase (iterator first, iterator last); // xóa các phần tử nằm trong khoảng first -> last
    9. void remove(value); //Xóa tất cả các giá trị value trong List
    10. iterator insert (iterator position,value); //chèn giá trị value vào vị trí position
      void insert (iterator position,size n,value); //chèn n giá trị value từ vị trí position
      void insert (iterator position, InputIterator first, InputIterator last); // chèn các giá trị từ first -> last của list này sang list khác bắt đầu từ vị trí position
    11. void sort(); // sắp xếp các giá trị trong List tăng dần
    12. void reverse(); // đảo ngược các giá trị trong List
    13. lấy giá trị tại 1 vị trí : List không hỗ trợ trực tiếp việc lấy giá trị mà ta phải thông qua iterator
              // áp dụng với List< int > 
          int get(list  a,int i){
              int count=0;
              list::iterator it;
              for(it=a.begin();it!=a.end();it++){
                  count++;
                  if(count==i)
                  return *it;
                }
              return -1;
              }
            
    14. Hiển thị tất cả các giá trị trong List:
          void showList(list a){
              list :: iterator it;
              for(it=a.begin();it!=a.end();it++){
                    cout << *it << " "; //*it: lấy giá trị mà con trỏ it trỏ tới
                  }
              cout << endl;
                }
              
  4. Full code Các bạn có thể tham khảo tại đây- chịu khó chút quảng cáo ạ