STL of C++ ACM ICPC

22 1.9K 1
STL of C++  ACM ICPC

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

STL for newbies MỤC LỤC I II ITERATOR (BIẾN LẶP): CONTAINERS (THƯ VIỆN LƯU TRỮ) Iterator: Vector (Mảng động): Deque (Hàng đợi hai đầu): List (Danh sách liên kết): Stack (Ngăn xếp): Queue (Hàng đợi): 10 Priority Queue (Hàng đợi ưu tiên): 11 Set (Tập hợp): 12 Mutiset (Tập hợp): 15 10 Map (Ánh xạ): 16 11 Multi Map (Ánh xạ): 17 III STL ALGORITHMS (THƯ VIỆN THUẬT TOÁN): 18 Min, max 18 1.1 18 1.2 max 18 1.3 next_permutation 18 1.4 prev_permution 18 Sắp xếp: 19 Tìm kiếm nhị phân (các hàm đoạn xếp): 19 3.1 binary_search: 19 3.2 lower_bound: 20 3.3 upper_bound 20 IV THƯ VIỆN STRING C++: 21 STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT Lời nói đầu - - - - “C++ đánh giá ngôn ngữ mạnh tính mềm dẻo, gần gũi với ngôn ngữ máy Ngoài ra, với khả lập trình theo mẫu ( template ), C++ khiến ngôn ngữ lập trình trở thành khái quát, không cụ thể chi tiết nhiều ngôn ngữ khác Sức mạnh C++ đến từ STL, viết tắt Standard Template Library - thư viện template cho C++ với cấu trúc liệu giải thuật xây dựng tổng quát mà tận dụng hiệu tốc độ C Với khái niệm template, người lập trình đề khái niệm lập trình khái lược (generic programming), C++ cung cấp kèm với thư viện chuẩn STL Bộ thư viện thực toàn công việc vào liệu (iostream), quản lý mảng (vector), thực hầu hết tính cấu trúc liệu (stack, queue, map, set ) Ngoài ra, STL bao gồm thuật toán bản: tìm min, max, tính tổng, xếp (với nhiều thuật toán khác nhau), thay phần tử, tìm kiếm (tìm kiếm thường tìm kiếm nhị phân), trộn Toàn tính nêu cung cấp dạng template nên việc lập trình thể tính khái quát hóa cao Nhờ vậy, STL làm cho ngôn ngữ C++ trở nên sáng nhiều.” Trích “Tổng quan thư viện chuẩn STL” STL rộng nên tài liệu viết để định hướng cách sử dụng STL để bạn ứng dụng việc giải toán tin học đòi hỏi đến cấu trúc liệu giải thuật Mình chủ yếu sử dụng ví dụ, nguồn tài liệu từ trang web www.cplusplus.com , bạn tham khảo chi tiết Để hiểu trình bày này, bạn cần có kiến thức cấu trúc liệu, số thuật toán xếp, tìm kiếm Việc sử dụng thành thạo STL quan trọng bạn có ý định tham gia kì thi Olympic Tin Học, hay ACM “STL nối dài khả lập trình bạn” (trích lời thầy Lê Minh Hoàng) Mọi ý kiến đóng góp xin gửi địa chỉ: manhdjeu@gmail.com STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT - Thư viện mẫu chuẩn STL C++ chia làm thành phần là:  Containers Library : chứa cấu trúc liệu mẫu (template)  Sequence containers  Vector  Deque  List  Containers adpators  Stack  Queue  Priority_queue  Associative containers  Set  Multiset  Map  Multimap  Bitset  Algorithms Library: số thuật toán để thao tác liệu  Iterator Library: giống trỏ, dùng để truy cập đến phần tử liệu container  Numeric library: - Để sử dụng STL, bạn cần khai báo từ khóa “using namespace std;” sau khai báo thư viện (các “#include”, hay “#define”, ) Ví dụ: - #include #include //khai báo sử dụng container stack #define n 100 using namespace std; //khai báo sử dụng STL main() { } - I - - Việc sử dụng hàm STL tương tự việc sử dụng hàm class Các bạn đọc qua vài ví dụ thấy quy luật ITERATOR (BIẾN LẶP): Trong C++, biến lặp đối tượng bất kì, trỏ tới số phần tử phạm vi phần tử (như mảng container), có khả để lặp phần tử phạm vi cách sử dụng tập toán tử (operators) (như so sánh, tăng (++), ) Dạng rõ ràng iterator trỏ: Một trỏ trỏ tới phần tử mảng, lặp thông qua sử dụng toán tử tăng (++) Tuy nhiên, có STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT - II - - - dạng khác iterator Ví dụ: loại container (chẳng hạn vector) có loại iterator thiết kế để lặp phần tử cách hiệu Iterator có toán tử như:  So sánh: “==” , “!=” iterator  Gán: “=” iterator  Cộng trừ: “+”,”-“ với số ”++”,”—“  Lấy giá trị: “*” CONTAINERS (THƯ VIỆN LƯU TRỮ) Một container đối tượng cụ thể lưu trữ tập đối tượng khác (các phần tử nó) Nó thực lớp mẫu ( class templates) Container quản lý không gian lưu trữ cho phần tử cung cấp hàm thành viên (member function) để truy cập tới chúng, trực tiếp thông qua biến lặp (iterator – giống trỏ) Container xây dựng cấu trúc thuờng sử dụng lập trình như: mảng động dynamic arrays (vector), hàng đợi – queues (queue), hàng đợi ưu tiên – heaps (priority queue), danh sách kiên kết – linked list (list), – trees (set), mảng ánh xạ associative arrays (map), Nhiều container chứa số hàm thành viên giống Quyết định sử dụng loại container cho nhu cầu cụ thể nói chung không phụ thuộc vào hàm cung cấp mà phải dựa vào hiệu hàm thành viên (độ phức tạp (từ viết tắt ĐPT) hàm) Điều đặc biệt với container dãy (sequence containers), mà có khác độ phức tạp thao tác chèn/xóa phần tử hay truy cập vào phần tử Iterator: Tất container loại: Sequence container Associative container hỗ trợ iterator sau (ví dụ với vector, loại khác có chức vậy) /*khai báo iterator “it”*/ vector :: iterator it; /* trỏ đến vị trí phần tử vector */ it=vector.begin(); /*trỏ đến vị trí kết thúc (không phải phần tử cuối nhé) vector) */ it=vector.end(); /* khai báo iterator ngược “rit” */ vector :: reverse_iterator rit; rit = vector.rbegin(); /* trỏ đến vị trí kết thúc vector theo chiều ngược (không phải phần tử nhé*/ rit = vector.rend(); Tất hàm iterator có độ phức tạp O(1) STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT Vector (Mảng động): Khai báo vector: #include /* Vector chiều */ /* tạo vector rỗng kiểu liệu int */ vector first; //tạo vector với phần tử 100 vector second (4,100); // lấy từ đầu đến cuối vector second vector third (second.begin(),second.end()) //copy từ vector third vector four (third) /*Vector chiều*/ /* Tạo vector chiều rỗng */ vector < vector > v; /* khai báo vector 5×10 */ vector < vector > v (5, 10) ; /* khai báo vector chiều rỗng vector < vector > v (5) ; */ //khai báo vector 5*10 với phần tử khởi tạo giá trị vector < vector > v (5, vector (10,1) ) ; Các bạn ý dấu “ngoặc” không viết liền Ví dụ sau sai: /*Khai báo vector chiều SAI*/ vector v; Các hàm thành viên: Capacity: - size : trả số lượng phần tử vector ĐPT O(1) empty : trả true(1) vector rỗng, ngược lại false(0) ĐPT O(1) Truy cập tới phần tử: - operator [] : trả giá trị phần tử thứ [] ĐPT O(1) at : tương tự ĐPT O(1) STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT - front: trả giá trị phần tử ĐPT O(1) back: trả giá trị phần tử cuối ĐPT O(1) Chỉnh sửa: - push_back : thêm vào cuối vector ĐPT O(1) pop_back : loại bỏ phần tử cuối vector ĐPT O(1) insert (iterator,x): chèn “x” vào trước vị trí “iterator” ( x phần tử hay iterator đoạn phần tử…) ĐPT O(n) erase : xóa phần tử vị trí iterator ĐPT O(n) swap : đổi vector cho (ví dụ: first.swap(second);) ĐPT O(1) clear: xóa vector ĐPT O(n) Nhận xét: - Sử dụng vector tốt khi: o Truy cập đến phần tử riêng lẻ thông qua vị trí O(1) o Chèn hay xóa vị trí cuối O(1) - Vector làm việc giống “mảng động” Ví dụ 1: Ví dụ chủ yếu để làm quen sử dụng hàm đề cụ thể #include #include using namespace std; vector v; //Khai báo vector vector ::iterator it; //Khai báo iterator vector ::reverse_iterator rit; //Khai báo iterator ngược int i; main() { for (i=1;i[...]... có opearator[] STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT 17 III STL ALGORITHMS (THƯ VIỆN THUẬT TOÁN): Khai báo sử dụng: #include - Các hàm trong STL Algorithm khá nhiều nên mình chỉ giới thiệu sơ qua về một số hàm hay sử dụng trong các bài toán - Có một lưu ý nhỏ cho các bạn là khi sử dụng các hàm mà thực hiện trong một đoạn phần tử liên tiếp nào đó thì các hàm trong c++ thuờng có tác... “pos”, số phần tử thay thế là “size” và thay bằng xâu s1 STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT 21 o swap (string_cần_đổi): đổi giá trị 2 xâu cho nhau - String operations: o c_str : chuyển xâu từ dạng string trong C++ sang string trong C o substr (pos,length): return string được trích ra từ vị trí thứ “pos”, và trích ra “length” kí tự STL for newbies – Điêu Xuân Mạnh – D10CN6 PTIT 22 ... std; main() { set s; set ::iterator it; s.insert(9); s.insert(5); cout

Ngày đăng: 04/09/2016, 23:23

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan