Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
213,5 KB
Nội dung
Nhóm 31_TinC52 TRƯỜNG ĐẠI HỌC NƠNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ***** BÁO CÁO BÀI TẬP LỚN MƠN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Gv hướng dẫn : Ngơ Cơng Thắng Lớp : THC-K52 Nhóm : 31 Đề tài số : 08 Nhóm sv thực hiện: Đỗ Thị Ngọc Bích Hồng Thị Hoa Nguyễn Thị Ngọc Hun Nguyễn Thị Thảo Nguyễn Thị Xuân Hà Nội, 2010 Nhóm 31_TinC52 Đề tài số : Tìm hiểu thư viện STL: Tổng quan STL, Algorithms, Iterators Function Object Viết chương trình nhập vào danh sách n sinh viên, sinh viên có thơng tin họ tên, lớp, điểm TBC Tìm sinh viên có tên nhập vào từ bàn phím u cầu chương trình có sử dụng container list để chứa đối tượng sinh viên, algorithms find_if đối tượng hàm tự tạo để tìm kiếm Phân chia cơng việc thành viên nhóm: Gíơi thiệu STL (Standard Template Library) giải thuật (Algorithm) Nguyễn Thị Thảo Nguyễn Thị Xn Tìm hiểu cơngtenơ (container) trỏ (iterator) Đỗ Thị Ngọc Bích Nguyễn Thị Ngọc Hun Tìm hiểu Function Object Hồng Thị Hoa Chương trình: Nhóm Nhóm 31_TinC52 Mục lục Lời giới thiệu Nội dung A Lý thuyết (Standard Template Library) I Giơí thiệu thư viện STL (Standard Template Library)…… II Các côngtenơ (container).………… …………………………6 Côngtenơ Côngtenơ liên kết Hàm thành viên Kiểu liệu trừu tượng III Các giải thuật (Algorithm)…………….…………………….11 IV Con trỏ (iterator)….…………………………………… ….13 V Function Object………………………………… ………… 15 Khái niệm Phân loại Sử dụng Function Object Thư viện Functonal B Lập trình………………………………………………………… 17 Kết luận Tài liệu tham khảo…………………………………………………… 21 Nhóm 31_TinC52 Lời giới thiệ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 Ngồ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 mẫu chuẩn 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 mẫu chuẩn ( template ), người lập trình đề khái niệm lập trình khái lược, C++ cung cấp kèm với thư viện chuẩn STL Trong phạm vi báo cáo nhóm thực xin giới thiệu thư viện chuẩn STL với việc tìm hiểu cơngteno (container), giải thuật (Algorithm), iterator (con trỏ), Function Object thư viện Trong trình tìm hiểu, cố gắng tìm hiểu khơng thể tránh khỏi sai sót Mong thầy giáo bạn bổ sung thêm Xin chân thành cám ơn Nhóm thực Nhóm 31_TinC52 A Lý thuyết I Giới thiệu thư viện STL (Standard Template Library) STL,viết tắt Standard Template Library thư viện mẫu chuẩn cho C++ phát triển vào năm 1992, với mong muốn có cấu trúc liệu giải thuật tổng qt khơng làm tính hiệu Thư viện đưa vào danh sách thư viện chuẩn C++ theo tiêu chuẩn ANSI/ISO với tên gọi Standard Template Library (STL) STL nhiều tổ chức, hãng phần mềm mở rộng phát triển Trong đáng kể phải kể đến phiên SGI_STL Silicon Graphics STL Port (hiện tích hợp Borland C++ Builed 6) Đặc điểm thư viện STL hỗ trợ trình biên dịch hai mơi trường WINDOWS lẫn UNIX Vì nên sử dụng thư viện xử lý thuận tiện cho việc chia sẻ mã nguồn với cộng đồng phát triển STL gồm thành phần chính: - Container (các lưu trữ liệu) cấu trúc liệu phổ biến template hóa dùng để lưu trữ kiểu liệu khác Các container chia làm loại: + Sequential container (các ctdl tuần tự) bao gồm list, vector deque + Asociative container (các ctdl liên kết) bao gồm map, multimap, set multiset - Iterator (biến lặp) giống trỏ, tích hợp bên container - Algorithm (các thuật toán ) hàm phổ biến để làm việc với lưu trữ thêm, xóa, sửa, truy xuất,tìm kiếm, xếp - Function object (functor): Một kiểu đối tượng gọi hàm, kỹ thuật STL nâng cao kết hợp với algorithm - Các adapter (bộ tương thích) , chia làm loại: Nhóm 31_TinC52 + container adapter (các tương thích lưu trữ) bao gồm stack, queue priority_queue + iterator adapter (các tương thích trỏ) + function adapter (các tương thích hàm) Những thành phần làm việc chung với thành phần khác để cung cấp giải pháp cho vấn đề khác chương trình Bộ thư viện thực tồ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 ) Ngồi ra, STL cịn bao gồm thuật tố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 Tồn tính nêu cung cấp dạng template nên việc lập trình ln thể tính khái qt hóa cao Nhờ vậy, STL làm cho ngôn ngữ C++ trở nên sáng nhiều Đặc điểm thư viện STL hỗ trợ trình biên dịch hai mơi trường WINDOWS lẫn UNIX, nên sử dụng thư viện xử lý thuận tiện cho việc chia mã nguồn với cộng đồng phát triển.Vì thư viện chuẩn thiết kế chuyện gia hàng đầu chứng minh tính hiệu lịch sử tồn nó, thành phần thư viện khuyến cáo sử dụng thay dùng phần viết tay bên ngồi hay phương tiện cấp thấp khác Thí dụ, dùng std::vector hay std::string thay dùng kiểu mảng đơn cách hữu hiệu để viết phần mềm an toàn linh hoạt Các chức thư viện chuẩn C++ khai báo namespace std; II Các côngtenơ (container) Côngtenơ cách lưu trữ liệu, bao gồm liệu có sẵn int, float đối tượng lớp STL có loại containers Các containers STL chia làm loại: container (vector, list, deque) container liên kết (set, Nhóm 31_TinC52 multiset, map, multimap) Ngồi có vài container gọi kiểu liệu trừu tượng, chúng dạng đặc biệt container khác (stack, queue, priority queue) Côngtenơ Một côngtenơ (sequencial container) lưu trữ tập hợp phần tử mà hình dung đường thẳng, nhà mặt phố Mỗi phần tử liên kết với phần tử khác vị trí theo đường thẳng Mỗi phần tử (trừ phần tử cuối cùng) có phần tử xác định đứng trước đứng sau Một mảng C++ ví dụ cơngtenơ Các cơngtenơ bản: Côngtenơ Đặc điểm Mảng C++ thông thường Kích thước cố định Vector List Deque Những thuận lợi không thuận lợi + Truy nhập ngẫu nhiên nhanh (qua số mảng) + Chèn xóa phần tử chậm Tái định vị, mảng mở rộng được, tương tự mảng chiều Danh sách liên kết kép Là biến dạng vector, trợ giúp truy nhập ngẫu nhiên dùng tốn tử [] Tuy nhiên khơng giống vector mà giống danh sách, hàng đợi đầu truy nhập trước sau + Kích thước khơng thay đổi thời điểm chạy chương trình + Truy nhập ngẫu nhiên nhanh (qua số) + Chèn xóa phần tử chậm + Chèn xóa phần tử cuối nhanh + Chèn xóa phần tử vị trí nhanh + Truy nhập nhanh tới hai đầu + Truy nhập ngẫu nhiên chậm + Truy nhập ngẫu nhiên nhanh (dùng số) + Chèn xóa phần tử chậm + Chèn xóa phần tử đầu cuối nhanh Nhóm 31_TinC52 Việc tạo đối tượng cơngtenơ dễ Đầu tiên phải có file tiêu đề thích hợp Sau sử dụng dạng mẫu với tham số loại đối tượng cần lưu trữ Ví dụ: vetro avact //tạo vecto số nguyên Hoặc: list departure_list; //tạo danh sách đối tượng airtime Chú ý: không cần xác định kích thước cho cơngtenơ Các cơngtenơ tự chúng quan tâm tới tất việc cấp phát nhớ Côngtenơ liên kết Một côngtenơ liên kết cơngtenơ khơng tuần tự, thay vào sử dụng khóa để truy nhập liệu Các khóa, điển hình số hoạc chuỗi, sử dụng tự động côngtenơ để xếp phần tử để lưu trữ theo trật tự định Nó giống từ điển tiếng Anh mà truy nhập liệu cách tra từ xếp theo thứ tự alphabe Nếu bắt đầu với giá trị khóa, chẳng hạn “aardvark”, cơngtenơ chuyển khóa tới vị trí phần tử nhớ Nếu biết khóa nhanh chóng truy nhập tới giá trị liên kết Có hai loại cơngtenơ liên kết STL: ánh xạ (map) tập hợp (set) Một ánh xạ liên kết khóa (ví dụ từ mà muốn tra) với giá trị (ví dụ định nghĩa từ) Giá trị loại đối tượng Một tập hợp (set) tương tự ánh xạ (map) lưu trữ khóa, khơng có giá trị liên kết Nó giống danh sách từ khơng có định nghĩa Các cơngtenơ ánh xạ tập hợp lưu trữ khóa cho giá trị Điều giống danh bạ điện thoại, người có số điện thoại Trái lại, côngtenơ đa ánh xạ (multimap) đa tập hợp (multiset) cho phép có nhiều khóa Ví dụ, từ điển tiếng Anh có vài mục cho từ “set” Nhóm 31_TinC52 Các cơngtenơ liên kết bản: Cơngtenơ Map Đặc điểm + Liên kết khóa với phần tử Những thuận lợi không thuận lợi + Truy nhập ngẫu nhiên nhanh (bằng khóa) + Khơng hiệu suất khóa khơng phân bố Multimap + Chỉ cho phép khóa cho giá trị + Liên kết khóa với phần tử Set + Cho phép nhiều giá trị khóa + Chỉ lưu trữ khóa + Khơng hiệu suất khóa khơng phân bố + Truy nhập ngẫu nhiên nhanh (bằng khóa) + Khơng hiệu suất khóa khơng phân bổ Multiset + Chỉ cho phép khóa với giá trị + Chỉ lưu trữ khóa + Cho phép nhiều giá trị khóa + Khơng hiệu suất khóa khơng phân bổ + Truy nhập ngẫu nhiên nhanh (bằng khóa) + Truy nhập ngẫu nhiên nhanh (bằng khóa) Tạo cơngtenơ liên kết y tạo côngtenơ tuần tự: Map IntMap; Hoặc: //tạo ánh xạ số nguyên Multiset machinists; //tạo đa tập hợp đối tượng employee Hàm thành viên Các giải thuật (algorithm) thực cơng việc phức tạp xếp tìm kiếm Tuy nhiên, côngtenơ cần thành viên để thực nhiệm vụ đơn giản mà dành riêng cho côngtenơ cụ thể Một vài hàm thành viên chung cho tất côngtenơ Tên Size() Empty() Max_size() Chức Trả số mục cơngtenơ Trả true cơngtenơ rỗng Trả kích thước lớn có cơngtenơ Nhóm 31_TinC52 Begin() Trả trỏ (iterator) trỏ tới đầu cơngtenơ để bắt đầu trỏ tiến phía trước qua côngtenơ End() Trả trỏ trỏ tới vị trí q vị trí cuối cơngtenơ, dùng để kết thúc trỏ tiến Rbegin() Trả trỏ ngược trỏ tới cuối côngtenơ để bắt đầu trỏ lùi qua côngtenơ Rend() Trả trỏ ngược trỏ tới đầu côngtenơ dùng để kết thúc trỏ lùi Nhiều hàm thành viên khác xuất côngtenơ định loại côngtenơ định Kiểu liệu trừu tượng Có thể sử dụng cơngtenơ để tạo loại côngtenơ khác gọi kiểu liệu trừu tượng hay ADT (Abstract Data Type) Một ADT loại cơngtenơ đơn giản hóa tập trung vào khía cạnh cụ thể cơngtenơ hơn, cung cấp giao diện khác cho người lập trình Các ADT cài đặt STL ngăn xếp (stack), hàng đợi (queue) hàng đợi ưu tiên (priority queue) Một ngăn xếp hạn chế truy nhập việc đặt vào lấy mục liệu đỉnh ngăn xếp Còn hàng đợi, đặt mục liệu đầu lấy chúng đầu khác Trong hàng đợi ưu tiên, liệu đặt vào phần đầu theo thứ tự ngẫu nhiên, lấy đầu khác luôn lấy mục liệu lớn lưu trữ: hàng đợi ưu tiên tự động xếp liệu giúp 10 Nhóm 31_TinC52 Cơ chế STL dùng để tạo ADT từ kiểu phận thích ứng (adaptor) Các adaptor lớp mẫu chuyển hàm dùng ADT thành hàm dùng côngtenơ nằm ADT Ngăn xếp, hàng đợi, hàng đợi ưu tiên tạo từ côngtenơ khác hàng đợi hai đầu (deque) thường sử dụng Các kiểu liệu trừu tượng: Cơngtenơ Stack Cài đặt Có thể cài đặt Đặc điểm Chèn (push, insert) xóa đầu vetor, list deque Queue Có thể cài đặt list Chèn đầu xóa đầu deque khác Priority Có thể cài đặt Chèn (push, insert) theo thứ tự ngẫu queue vetor deque nhiên xóa (remove, pop) theo thứ tự xếp đầu khác Chúng ta sử dụng mẫu (template) mẫu để tạo ADT Ví dụ ngăn xếp lưu trữ kiểu int, tạo từ côngtenơ deque: Stack astak; Chú ý: Phải chèn khoảng trắng cào hai dấu ngoặc nhọn để trình biên dịch khơng tưởng tốn tử >> III Các giải thuật (Algorithm) Trong STL giải thuật hàm cho trước để làm việc cho mục liệu bên côngtenơ (hay côngtenơ) Chú ý giải thuật STL hàm thành viên hay chí hàm bạn lớp cơngtenơ Chúng ta sử dụng giải thuật 11 Nhóm 31_TinC52 với mảng có sẵn C++ với lớp cơngtenơ tự tạo (cho lớp hàm xác định) Để sử dụng giải thuật (Algorithm), bạn phải khai báo thư viện STL Algorithm: #include Các giải thuật chia thành nhóm: - Nhóm hàm khơng thay đổi container - Nhóm hàm thay đổi container - Nhóm hàm xếp - Nhóm hàm danh sách xếp - Nhóm làm heap - Nhóm hàm tìm min/max Một vài giải thuật đại diện hay dùng: Giải thuật Find Chức Tìm kiếm phần cơngteno mà có giá trị Count rõ Đếm số phần tử cơngteno có giá trị rõ Search Tìm kiếm dãy phần tử cho côngteno Sort côngtenơ khác Sắp xếp phần tử côngtenơ theo thứ tự Merge Thêm _if vào rõ Dùng để trộn cơngtenơ vào cơngtenơ Các giải thuật có tham số phụ, đối tượng giải thuật For_each hàm hàm.(vd: find_if, replace_if,…) Thực hàm rõ cho phần tử Transform cơngtenơ Làm việc với tất mục liệu côngtenơ đặt giá trị kết côngtenơ khác Giả sử xếp mảng số nguyên theo chiều tăng: 12 Nhóm 31_TinC52 #include #include using namespace std; int main() { int arr[]={4,10,5,8,9}; int n=0; sort(arr,arr+5); //sap xep cac so for(int j=0;j