Danh sách std :: là gì?
Trong C ++, std :: list đề cập đến một vùng chứa lưu trữ. Danh sách std: cho phép bạn chèn và xóa các mục từ bất kỳ đâu. Danh sách std :: được triển khai dưới dạng danh sách được liên kết kép. Điều này có nghĩa là dữ liệu danh sách có thể được truy cập theo hai hướng và tuần tự.
Danh sách Thư viện Mẫu Chuẩn không hỗ trợ truy cập ngẫu nhiên nhanh, nhưng nó hỗ trợ truy cập tuần tự từ mọi hướng.
Bạn có thể phân tán các phần tử danh sách trong các phần bộ nhớ khác nhau. Thông tin cần thiết để truy cập tuần tự vào dữ liệu được lưu trữ trong một vùng chứa. Danh sách std :: có thể mở rộng và thu nhỏ từ cả hai đầu khi cần thiết trong thời gian chạy. Bộ phân bổ nội bộ tự động đáp ứng các yêu cầu lưu trữ.
Trong hướng dẫn C ++ này, bạn sẽ học:
- Danh sách std :: là gì?
- Tại sao sử dụng std :: list?
- Cú pháp danh sách
- Chức năng danh sách C ++
-
- Trình tạo
- Thuộc tính vùng chứa
- Chèn vào danh sách
- Xóa khỏi danh sách
Tại sao sử dụng std :: list?
Đây là lý do sử dụng std :: List:
- Danh sách std :: so sánh tốt hơn với các vùng chứa trình tự khác như mảng và vectơ.
- Chúng có hiệu suất tốt hơn trong việc chèn, di chuyển và trích xuất các phần tử từ bất kỳ vị trí nào.
- Danh sách std :: cũng hoạt động tốt hơn với các thuật toán thực hiện các hoạt động như vậy một cách chuyên sâu.
Cú pháp danh sách
Để xác định std :: list, chúng ta phải nhập tệp tiêu đề
. Đây là cú pháp định nghĩa std :: list:
template < class Type, class Alloc =allocator> class list;
Dưới đây là mô tả của các thông số trên:
- T - Xác định kiểu phần tử được chứa.
Bạn có thể thay thế T bằng bất kỳ kiểu dữ liệu nào, ngay cả những kiểu do người dùng xác định.
- Alloc - Xác định kiểu của đối tượng cấp phát.
Điều này sử dụng mẫu lớp cấp phát theo mặc định. Nó phụ thuộc vào giá trị và sử dụng một mô hình cấp phát bộ nhớ đơn giản.
Ví dụ 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề thuật toán để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề iostream để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề danh sách để sử dụng các chức năng của nó.
- Gọi hàm main (). Logic chương trình nên được thêm vào trong phần thân của hàm này.
- Tạo một danh sách có tên my_list với tập hợp 4 số nguyên.
- Sử dụng vòng lặp for để tạo biến vòng lặp x. Biến này sẽ được sử dụng để lặp qua các phần tử danh sách.
- In ra các giá trị của danh sách trên bảng điều khiển.
- Cuối phần thân của vòng lặp for.
- Cuối phần thân của hàm main ().
Chức năng danh sách C ++
Dưới đây là các hàm std :: list phổ biến:
Chức năng | Sự miêu tả |
chèn() | Hàm này sẽ chèn một mục mới trước vị trí mà trình vòng lặp trỏ đến. |
push_back () | Chức năng này thêm một mục mới vào cuối danh sách. |
push_front () | Nó thêm một mục mới ở đầu danh sách. |
pop_front () | Nó xóa mục đầu tiên của danh sách. |
kích thước() | Hàm này xác định số lượng phần tử danh sách. |
trước mặt() | Để xác định các mục đầu tiên của danh sách. |
trở lại() | Để xác định mục cuối cùng của danh sách. |
đảo ngược() | Nó đảo ngược các mục trong danh sách. |
hợp nhất () | Nó kết hợp hai danh sách được sắp xếp. |
Trình tạo
Đây là danh sách các chức năng được cung cấp bởi tệp tiêu đề
:
- Hàm tạo mặc định std :: list :: list () - Nó tạo ra một danh sách rỗng, không có phần tử nào.
- Fill constructor std :: list :: list () - Nó tạo một danh sách với n phần tử và gán giá trị bằng không (0) cho mỗi phần tử.
- Hàm tạo phạm vi std :: list :: list () - tạo một danh sách có nhiều phần tử trong phạm vi từ đầu đến cuối.
- Copy constructor std :: list :: list () - Nó tạo một danh sách với một bản sao của mỗi phần tử có trong danh sách hiện có.
- Move constructor std :: list :: list () - tạo một danh sách với các phần tử của một danh sách khác bằng cách sử dụng ngữ nghĩa di chuyển.
- Hàm khởi tạo danh sách khởi tạo std :: list :: list () - Nó tạo một danh sách với các phần tử của danh sách khác bằng cách sử dụng ngữ nghĩa di chuyển.
Ví dụ 2:
#include#include using namespace std;int main(void) {list
l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề danh sách để sử dụng các chức năng của nó.
- Bao gồm không gian tên std trong mã để sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main (). Logic chương trình nên được thêm vào trong phần thân của hàm này.
- Tạo một danh sách trống có tên l.
- Tạo danh sách có tên l1 với bộ 3 số nguyên.
- Tạo một danh sách có tên l2 với tất cả các phần tử trong danh sách có tên l1, từ đầu đến cuối.
- Tạo một danh sách có tên l3 bằng cách sử dụng ngữ nghĩa di chuyển. Danh sách l3 sẽ có nội dung tương tự như danh sách l2.
- In kích thước của danh sách có tên l trên bảng điều khiển cùng với văn bản khác.
- In một số văn bản trên bảng điều khiển.
- Tạo một trình lặp đặt tên cho nó và sử dụng nó để lặp qua các phần tử của danh sách có tên l2.
- In các phần tử của danh sách có tên l2 trên bảng điều khiển.
- In một số văn bản trên bảng điều khiển.
- Tạo một trình lặp đặt tên cho nó và sử dụng nó để lặp qua các phần tử của danh sách có tên l3.
- In các phần tử của danh sách có tên l3 trên bảng điều khiển.
- Chương trình phải trả về giá trị khi hoàn thành thành công.
- Cuối phần thân của hàm main ().
Thuộc tính vùng chứa
Đây là danh sách các thuộc tính vùng chứa:
Bất động sản | Sự miêu tả |
Sự nối tiếp | Vùng chứa trình tự sắp xếp các phần tử của chúng theo một trình tự tuyến tính nghiêm ngặt. Các phần tử được truy cập theo vị trí của chúng trong dãy. |
Danh sách được liên kết kép | Mọi phần tử đều có thông tin về cách xác định vị trí các phần tử trước đó và tiếp theo. Điều này cho phép thời gian không đổi cho các hoạt động chèn và xóa. |
Nhận biết phân bổ | Đối tượng cấp phát được sử dụng để sửa đổi kích thước lưu trữ động. |
Chèn vào danh sách
Có nhiều chức năng khác nhau mà chúng ta có thể sử dụng để chèn giá trị vào danh sách. Hãy chứng minh điều này:
Ví dụ 3:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề thuật toán để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề iostream để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề danh sách để sử dụng các chức năng của nó.
- Gọi hàm main (). Logic chương trình nên được thêm vào trong phần thân của hàm này.
- Tạo một danh sách có tên my_list với tập hợp 4 số nguyên.
- Chèn phần tử 11 vào phía trước danh sách có tên my_list.
- Chèn phần tử 18 vào cuối danh sách có tên my_list.
- Tạo một trình lặp nó và sử dụng nó để tìm phần tử 10 từ danh sách my_list.
- Sử dụng câu lệnh if để xác định xem phần tử trên có được tìm thấy hay không.
- Chèn phần tử 21 trước phần tử trên nếu nó được tìm thấy.
- Cuối phần nội dung của câu lệnh if.
- Sử dụng vòng lặp for để tạo biến vòng lặp x. Biến này sẽ được sử dụng để lặp qua các phần tử danh sách.
- In ra các giá trị của danh sách trên bảng điều khiển.
- Cuối phần thân của vòng lặp for.
- Cuối phần thân của hàm main ().
Xóa khỏi danh sách
Có thể xóa các mục khỏi danh sách. Hàm xóa () cho phép bạn xóa một mục hoặc một loạt các mục khỏi danh sách.
- Để xóa một mục, bạn chỉ cần chuyển một vị trí số nguyên. Mục sẽ bị xóa.
- Để xóa một dải ô, bạn chuyển các trình vòng lặp bắt đầu và kết thúc. Hãy chứng minh điều này.
Ví dụ 4:
#include#include #include using namespace std;int main() {std::list
my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list ::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề thuật toán để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề iostream để sử dụng các chức năng của nó.
- Bao gồm tệp tiêu đề danh sách để sử dụng các chức năng của nó.
- Bao gồm không gian tên std trong chương trình của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main (). Logic chương trình nên được thêm vào trong phần thân của hàm này.
- Tạo một danh sách có tên my_list với tập hợp 4 số nguyên.
- In một số văn bản trên bảng điều khiển.
- Sử dụng vòng lặp for để tạo biến vòng lặp x. Biến này sẽ được sử dụng để lặp qua các phần tử danh sách.
- In ra các giá trị của danh sách trên bảng điều khiển.
- Cuối phần thân của vòng lặp for.
- Tạo một trình lặp i trỏ đến phần tử đầu tiên của danh sách.
- Sử dụng hàm xóa () được trỏ bởi trình vòng lặp i.
- In một số văn bản trên bảng điều khiển.
- Sử dụng vòng lặp for để tạo biến vòng lặp x. Biến này sẽ được sử dụng để lặp qua các phần tử danh sách.
- In ra các giá trị của danh sách trên bảng điều khiển. Điều này xảy ra sau khi xóa.
- Cuối phần thân của vòng lặp for.
- Chương trình phải trả về một giá trị sau khi hoàn thành thành công.
- Cuối phần thân của hàm main ().
Tóm lược:
- Danh sách std :: là một vùng chứa lưu trữ.
- Nó cho phép chèn và xóa các mục từ bất kỳ đâu vào thời gian cố định.
- Nó được triển khai như một liên kết kép
- Dữ liệu danh sách std :: có thể được truy cập hai chiều và tuần tự.
- std :: list không hỗ trợ truy cập ngẫu nhiên nhanh. Tuy nhiên, nó hỗ trợ truy cập tuần tự từ mọi hướng.
- Bạn có thể phân tán các phần tử danh sách của std :: list trong các phần bộ nhớ khác nhau.
- Bạn có thể thu nhỏ hoặc mở rộng danh sách std :: từ cả hai đầu khi cần thiết trong thời gian chạy.
- Để chèn các mục vào std :: list, chúng ta sử dụng hàm insert ().
- Để xóa các mục khỏi danh sách std ::, chúng ta sử dụng hàm xóa ().