1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về thư viên STL

38 623 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 38
Dung lượng 409,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Function object functor: Một kiểu đối tượng có thể gọi như 1 hàm, đúng ra đây là 1 kỹ thuật nhưng trong STL nó được nâng cao và kết hợp với các algorithm  Các adapter bộ tương thíc

Trang 1

Báo cáo bài tập lớn môn

Lập trình hướng đối tượng

GVHD : Ngô Công Thắng Lớp : TinC-K52

Đề tài số : 08Nhóm SVTH: Đỗ Thị Ngọc Bích Hoàng Thị Hoa Nguyễn Thị Ngọc Huyên Nguyễn Thị Thảo

Nguyễn Thị Xuân

Trang 2

Đề tài:

Algorithm, Iterator và Function Object Viết chương trình nhập vào một danh sách n sinh viên, mỗi sinh viên có các thông tin về 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 Yêu cầu trong chương trình

có sử dụng container list để chứa các đối tượng sinh

viên, algorithms find_if và đối tượng hàm tự tạo để tìm kiếm

Trang 3

Nội dung báo cáo

1 Tìm hiểu về thư viện STL (Standard Template Library).

1.1 Giới thiệu về thư viện STL.

Trang 4

1 Tìm hiểu về thư viện STL

1.1 Giới thiệu về thư viện STL.

template cho C++ được phát triển vào năm 1992 với mong muốn có được những cấu trúc dữ liệu cũng như giải thuật tổng quát nhất nhưng không làm mất đi tính hiệu quả

Thư viện này được đưa vào danh sách các thư viện chuẩn của C++ theo tiêu chuẩn ANSI/ISO với tên gọi Standard Template Library (STL)

Trang 5

1 Tìm hiểu về thư viện STL

1.1 Giới thiệu về thư viện STL.

ra dữ liệu (iostream), quản lý mảng (vector), thực hiện hầu hết các tính năng của các cấu trúc dữ liệu cơ bản (stack, queue, map, set )

min, max, tính tổng, sắp xếp (với nhiều thuật toán khác nhau), thay thế các phần tử, tìm kiếm (tìm kiếm thường

và tìm kiếm nhị phân), trộn

trình biên dịch ở cả hai môi trường WINDOWS lẫn UNIX

Trang 6

1 Tìm hiểu về thư viện STL

1.1 Giới thiệu về thư viện STL.

STL gồm các thành phần chính:

Container (các bộ lưu trữ dữ liệu) là các cấu trúc dữ

liệu phổ biến đã template hóa dùng để lưu trữ các kiểu

dữ liệu khác nhau Các container chia làm 2 loại:

vector và deque

multimap, set và multiset

Iterator (biến lặp) giống như con trỏ, tích hợp bên

trong container

Algorithm (các thuật toán ) là các hàm phổ biến để

làm việc với các bộ lưu trữ như thêm, xóa, sửa, truy

xuất,tìm kiếm, sắp xếp

Trang 7

1 Tìm hiểu về thư viện STL

1.1 Giới thiệu về thư viện STL.

Function object (functor): Một kiểu đối tượng có thể

gọi như 1 hàm, đúng ra đây là 1 kỹ thuật nhưng trong STL nó được nâng cao và kết hợp với các algorithm

Các adapter (bộ tương thích) , chia làm 3 loại:

gồm stack, queue và priority_queue

Trang 8

1 Tìm hiểu về thư viện STL

1.2 Các côngtenơ (containers).

liệu có sẵn như int, float và các đối tượng lớp

chia làm 2 loại:

trừu tượng, chúng là các dạng đặc biệt của các

container khác (stack, queue, priority queue)

Trang 9

1 Tìm hiểu về thư viện STL

1.2 Các côngtenơ (containers).

1.2.1 Côngteno tuần tự

một tập hợp các phần tử mà có thể hình dung như một đường thẳng, như các nhà trên mặt phố Mỗi phần tử

liên kết với một phần tử khác bằng vị trí của nó theo

đường thẳng Mỗi phần tử (trừ phần tử cuối cùng) đều

có một phần tử xác định đứng trước và đứng sau nó

Vd: Một mảng C++ là một côngtenơ tuần tự

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 cả việc cấp phát

bộ nhớ

Trang 10

Các côngtenơ tuần tự cơ bản:

Côngtenơ Đặc điểm Những thuận lợi và không thuận lợi

Vector Tái định vị, mảng có

thể mở rộng được, tương tự như mảng 1 chiều

+ Truy nhập ngẫu nhiên nhanh (qua chỉ số) + Chèn và xóa các phần tử ở giữa chậm + Chèn và xóa các phần tử ở cuối nhanh

List Danh sách liên kết kép + Chèn và xóa các phần tử ở bất kì vị trí nào

nhanh + Truy nhập nhanh tới cả hai đầu + Truy nhập ngẫu nhiên chậm Deque Là một biến dạng của

một vector, nó trợ giúp truy nhập ngẫu nhiên dùng toán tử [] Tuy nhiên không giống như một vector mà giống một danh sách, một hàng đợi 2 đầu có thể truy nhập cả trước và sau

+ Truy nhập ngẫu nhiên nhanh (dùng chỉ số) + Chèn và xóa các phần tử ở giữa chậm + Chèn và xóa các phần tử ở đầu hoặc ở cuối nhanh

Trang 11

vec.push_back(1);

cout<<”Xuất vector: “<<endl;

for (int i=0; i<vec.size(); i++)

cout<<vec[i]<<” “;

getch();

return 0;

}

Trang 12

1 Tìm hiểu về thư viện STL

1.2 Các côngtenơ (containers).

1.2.2 Côngtenơ liên kết

thay vào đó sử dụng các khóa để truy nhập dữ liệu Nó giống như một quyển từ điển tiếng Anh mà ở đó chúng

ta có thể truy nhập dữ liệu bằng cách tra các từ đã được sắp xếp theo thứ tự alphabe Nếu biết khóa thì chúng ta

có thể nhanh chóng truy nhập tới giá trị liên kết

và tập hợp (set) Một ánh xạ liên kết một khóa (ví dụ từ

mà chúng ta muốn tra) với một giá trị (ví dụ như định nghĩa của từ) Giá trị có thể là bất kì loại đối tượng nào Một tập hợp (set) tương tự như một ánh xạ (map) nhưng

nó chỉ lưu trữ các khóa, không có các giá trị liên kết Nó giống như một danh sách các từ không có định nghĩa

Trang 13

1 Tìm hiểu về thư viện STL

1.2 Các côngtenơ (containers).

Các côngtenơ ánh xạ và tập hợp chỉ lưu trữ duy nhất một khóa cho một giá trị Điều này giống như một danh

bạ điện thoại, ở đó mỗi người chỉ có duy nhất một số

điện thoại Trái lại, các côngtenơ đa ánh xạ (multimap)

và đa tập hợp (multiset) cho phép có nhiều khóa Ví dụ, trong một quyển từ điển tiếng Anh có thể có vài mục cho

từ “set”

Trang 14

Các côngtenơ liên kết cơ bản:

Côngtenơ Đặc điểm Những thuận lợi và không thuận lợi

Map + Liên kết khóa với

phần tử + Chỉ cho phép duy nhất một khóa cho mỗi giá trị

+ Truy nhập ngẫu nhiên nhanh (bằng khóa) + Không hiệu suất nếu các khóa không được phân bố đều

Multimap + Liên kết khóa với

phần tử + Cho phép nhiều giá trị khóa

+ Truy nhập ngẫu nhiên nhanh (bằng khóa) + Không hiệu suất nếu các khóa không được phân bố đều

Set + Chỉ lưu trữ các

khóa + Chỉ cho phép một khóa duy nhất với mỗi giá trị

+ Truy nhập ngẫu nhiên nhanh (bằng khóa) + Không hiệu suất nếu các khóa không được phân bổ đều

Multiset + Chỉ lưu trữ các

khóa + Cho phép nhiều giá trị khóa

+ Truy nhập ngẫu nhiên nhanh (bằng khóa) + Không hiệu suất nếu các khóa không được phân bổ đều

Trang 15

1 Tìm hiểu về thư viện STL

1.2 Các côngtenơ (containers).

1.2.3 Hàm thành viên

tạp như sắp xếp và tìm kiếm Tuy nhiên, các côngtenơ cũng cần các hàm thành viên để thực hiện những nhiệm

vụ đơn giản hơn mà chỉ dành riêng cho một côngtenơ cụ thể

côngtenơ:

Trang 16

Tên Chức năng

Size() Trả về số mục trong côngtenơ

Empty() Trả về true nếu côngtenơ rỗng

Max_size() Trả về kích thước lớn nhất có thể có của côngtenơ

Begin() Trả về một con trỏ (iterator) trỏ tới đầu côngtenơ để bắt đầu trỏ

tiến về phía trước qua côngtenơ

End() Trả về một con trỏ trỏ tới vị trí quá vị trí cuối cùng của một

côngtenơ, được dùng để kết thúc một con trỏ tiến

Rbegin() Trả về một con trỏ ngược trỏ tới cuối côngtenơ để bắt đầu trỏ lùi

qua côngtenơ Rend() Trả về một con trỏ ngược trỏ tới đầu côngtenơ được dùng để kết

thúc một con trỏ lùi

Trang 17

1 Tìm hiểu về thư viện STL

1.2 Các côngtenơ (containers).

1.2.4 Kiểu dữ liệu trìu tượng

Có thể sử dụng các côngtenơ cơ bản để tạo một loại côngtenơ khác gọi là một kiểu dữ liệu trừu tượng hay ADT (Abstract Data Type)

Một ADT là một loại côngtenơ đơn giản hóa tập trung vào các khía cạnh cụ thể của một côngtenơ cơ bản hơn,

nó cung cấp một giao diện khác cho người lập trình

Các ADT được cài đặt trong STL là ngăn xếp (stack), hàng đợi (queue) và hàng đợi ưu tiên (priority queue)

Trang 18

Một ngăn xếp hạn chế truy nhập bằng việc đặt vào và lấy ra một mục dữ liệu ở đỉnh của ngăn xếp Còn trong một hàng đợi, đặt các mục dữ liệu ở một đầu và lấy chúng ra ở một đầu khác.

Trong một hàng đợi ưu tiên, dữ liệu được đặt vào ở một phần đầu theo một thứ tự ngẫu nhiên, nhưng khi lấy

ra ở đầu khác luôn luôn lấy mục dữ liệu lớn nhất được lưu trữ: hàng đợi ưu tiên tự động sắp xếp dữ liệu giúp chúng ta

Trang 19

Ngăn xếp, hàng đợi, hàng đợi ưu tiên được tạo ra từ các côngtenơ tuần tự khác nhau nhưng hàng đợi hai đầu (deque) thường được sử dụng nhất.

Các kiểu dữ liệu trừu tượng:

Côngtenơ Cài đặt Đặc điểm

Stack Có thể cài đặt như

vetor, list hoặc deque

Chèn (push, insert) và xóa ở một đầu

Queue Có thể cài đặt như list

hoặc deque Chèn tại một đầu và xóa ở một đầu khác

Priority Có thể cài đặt như

vetor hoặc deque Chèn (push, insert) theo thứ tự ngẫu nhiên và xóa (remove, pop) theo

thứ tự đã được sắp xếp ở một đầu khác

Trang 20

1 Tìm hiểu về thư viện STL

1.3 Các giải thuật (Algorithm).

việc gì đó cho các mục dữ liệu bên trong một côngtenơ (hay trong các côngtenơ)

thành viên hay thậm chí là các hàm bạn của các lớp côngtenơ Chúng ta có thể sử dụng các giải thuật với các mảng có sẵn trong C++ hoặc với các lớp côngtenơ

tự tạo (cho các lớp các hàm cơ bản xác định)

Trang 22

1 Tìm hiểu về thư viện STL

1.4 Con trỏ ( iterator ).

con trỏ được sử dụng để truy nhập các mục dữ liệu (nó thường được gọi là các phần tử) trong một côngtenơ Thông thường, chúng được sử dụng để di chuyển liên tiếp từ phần tử này sang phần tử kia Một quá trình được gọi là trỏ (iterating) qua côngtenơ Có thể tăng một côngtenơ với các toán tử ++ để nó trỏ tới phần tử tiếp theo và có thể tham chiếu ngược (dereference) nó với toán tử * để lấy giá trị của phần tử nó trỏ tới

vài kiểu iterator có thể lưu trữ (hoặc nhớ) vị trí của một phần tử côngtenơ cụ thể Trong STL, một iterator biểu diễn bằng một đối tượng của một lớp iterator

Trang 23

1 Tìm hiểu về thư viện STL

1.4 Con trỏ ( iterator ).

iterator)

côngtenơ mỗi lần một mục dữ liệu Toán tử ++ của nó thực hiện việc này Một iterator hai chiều có thể di chuyển cả tiến và lùi, bởi vậy nó định nghĩa cả hai toán

tử ++ và Một iterator truy nhập ngẫu nhiên, ngoài khả năng di chuyển tiến và lùi nó có thể nhảy tới một vị trí tùy ý trong côngtennơ

Trang 24

1 Tìm hiểu về thư viện STL

1.4 Con trỏ ( iterator ).

file) để đọc các mục dữ liệu liên tiếp vào một côngtennơ Một iterator ra có thể “ trỏ tới” một thiết bị ra (như cout hoặc file) và ghi các phần tử từ một côngtenơ tới thiết bị

đó

Trang 25

Các đặc điểm của iterator:

iterator Đọc/ghi Iterator có thể

lưu trữ? Hướng Truy nhập

Random-acsess Đọc và ghi Có Tiến và lùi Ngẫu nhiên

Bidirectional Đọc và ghi Có Tiến và lùi Tuyến tính

Forward Đọc và ghi Có Chỉ tiến Tuyến tính

Output Chỉ ghi Không Chỉ tiến Tuyến tính

Input Chỉ đọc Không Chỉ tiến Tuyến tính

Trang 26

1 Tìm hiểu về thư viện STL

1.5 Function Object.

a, Khái niêm:

(đối tượng) được sử dụng như một function (hàm) Gọi function object nghĩa là chúng ta đang gọi đến

operator() của nó Viết một function object nghĩa là viết operator() cho một lớp Các function object là các object, bởi vậy chúng có trạng thái, còn các hàm bình thường thì không, do đó, chúng có thể ứng xử khác nhau tùy vào trạng thái – và điều đó tạo nên sự linh hoạt

Trang 27

1 Tìm hiểu về thư viện STL

1.5 Function Object.

lớp đó phải có ít nhất một hàm thỏa:

hàm friend

Trang 28

1 Tìm hiểu về thư viện STL

1.5 Function Object.

số và trả về value_type ví dụ hàm rand() trong <stdlib>

và một số thuật toán chẳng hạn như generate_n() - sinh một chuỗi

duy nhất của value_type và trả về một giá trị mà có thể không phải value_type ( void chẳng hạn)

của hai kiểu bất kỳ và trả về giá trị nào đó

Trang 29

1 Tìm hiểu về thư viện STL

tử so sánh tương đương ==

Trang 30

1 Tìm hiểu về thư viện STL

1.5 Function Object.

 Khai báo: #include <functional>

gồm cộng (plus) trừ (minus) nhân (multiplies) chia

(divides) chia lấy dư (modulus) đổi dấu (negate)

Trang 31

2 Bài tập.

Viết chương trình nhập vào một danh sách n sinh viên, mỗi sinh viên có các thông tin về 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 Yêu cầu trong chương trình có sử dụng container list để

chứa các đối tượng sinh viên, algorithms find_if và đối tượng hàm tự tạo để tìm kiếm

Trang 33

class comp_student:public binary_function<SV,string, bool>

Trang 34

//=======CHUONG TRINH CHINH=========

//Nhap danh sanh sinh vien

cout<<"\tNhap thong tin chi tiet cua tung sinh vien"<<endl;

Trang 35

//Hien danh sach sinh vien

cout<<"Danh sach sinh vien vua nhap:"<<endl;

Trang 37

Tài liệu tham khảo

1 Ngôn ngữ lập trình C ++ và lập trình hướng đối tượng Thầy : Ngô Công Thắng

2 Ngôn ngữ lập trình C ++ và cấu trúc dữ liệu

Tác giả :Nguyễn Việt Hương

3 C++ và lập trình hướng đối tượng

GS.Phạm Văn Ất, NXB GTVT, 2005

4 Lập trình hướng đối tượng với C++

Nguyễn Thanh Thủy và đồng nghiệp

5 Bài giảng ngôn ngữ lập trình C/C++

Phạm Hồng Thái – ĐH Công Nghệ - ĐHQGHN

6 http://www.google.com

7 Và một số tài liệu khác

Ngày đăng: 14/04/2015, 09:00

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w