Tìm hiểu thuật toán tổng quát trong lập trình phần 3 pptx

8 455 0
Tìm hiểu thuật toán tổng quát trong lập trình phần 3 pptx

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

Thông tin tài liệu

17 Chương 10: Thuật toán tổng quát Ví dụ thuậttoánfind_max  Áp dụng cho kiểu mảng thô template <typename T> T* find_max(T* first, T* last) { T* pMax = first; while (first != last) { if (*first > *pMax) pMax = first; ++first; } return pMax; }  Áp dụng cho kiểuVector template <typename T> T* find_max(const Vector<T>& v) { int iMax = 0; for (int i=0; i < v.size(); ++ i) if (v[i] > v[iMax]) iMax = i; return &v[iMax]; } 18 Chương 10: Thuật toán tổng quát  Áp dụng cho kiểu List (₫ã làm quen): template <typename T> ListItem<T>* find_max(List<T>& l) { ListItem<T> *pItem = l.getHead(); ListItem<T> *pMaxItem = pItem; while (pItem != 0) { if (pItem->data > pMaxItem->data) pMaxItem = pItem; pItem = pItem->getNext(); } return pMaxItem; } Â Cần tổng quát hóa phương pháp truy lặp phần tử! 19 Chương 10: Thuật toán tổng quát Bộ truy lặp (iterator)  Mục ₫ích: Tạomộtcơ chế thống nhấtchoviệctruylặpphầntử cho các cấutrúcdữ liệumàkhôngcầnbiếtchi tiếtthựcthibên trong từng cấutrúc  Ý tưởng: Mỗicấutrúcdữ liệucungcấpmộtkiểubộ truy lặp riêng, có ₫ặctínhtương tự như mộtcon trỏ (trong trường hợp ₫ặcbiệtcóthể là mộtcon trỏ thực)  Tổng quát hóa thu ậttoáncopy: template <class Iterator1, class Iterator2> void copy(Iterator1 s, Iterator2 d, int n) { while (n ) { *d = *s; ++s; ++d; } } Cácphéptoánápdụng ₫ượctương tự con trỏ 20 Chương 10: Thuật toán tổng quát  Tổng quát hóa thuậttoánfind_max: template <typename ITERATOR> ITERATOR find_max(ITERATOR first, ITERATOR last) { ITERATOR pMax = first; while (first != last) { if (*first > *pMax) pMax = first; ++first; } return pMax; } Cácphéptoánápdụng ₫ượctương tự con trỏ 21 Chương 10: Thuật toán tổng quát Bổ sung bộ truy lặpchokiểuVector  KiểuVector lưutrữ dữ liệudướidạng mộtmảng => có thể sử dụng bộ truy lặpdướidạng con trỏ! template <class T> class Vector { int nelem; T* data; public: typedef T* Iterator; Iteratator begin() { return data; } Iteratator end() { return data + nElem; } }; void main() { Vector<double> a(5,1.0),b(6); copy(a.begin(),b.begin(),a.size()); } 22 Chương 10: Thuật toán tổng quát Bổ sung bộ truy lặpchokiểuList template <class T> class ListIterator { ListItem<T> *pItem; ListIterator(ListItem<T>* p = 0) : pItem(p) {} friend class List<T>; public: T& operator*() { return pItem->data; } ListIterator<T>& operator++() { if (pItem != 0) pItem = pItem->getNext(); return *this; } friend bool operator!=(ListIterator<T> a, ListIterator<T> b) { return a.pItem != b.pItem; } }; 23 Chương 10: Thuật toán tổng quát Khuôn mẫuList cảitiến template <class T> class List { ListItem<T> *pHead; public: ListIterator<T> begin() { return ListIterator<T>(pHead); } ListIterator<T> end() { return ListIterator<T>(0); } }; 24 Chương 10: Thuật toán tổng quát Bài tậpvề nhà  Xây dựng thuậttoánsắpxếptổng quát ₫ể có thể áp dụng cho nhiềucấutrúcdữ liệutậphợp khác nhau cũng như nhiềutiêu chuẩnsắpxếp khác nhau. Viếtchương trình minh họa.  Xây dựng thuậttoáncộng/trừ/nhân/chia từng phầntử củahai cấutrúcdữ liệutậphợpbấtkỳ. Viếtchương trình minh họa. . n) { while (n ) { *d = *s; ++s; ++d; } } Cácphéptoánápdụng ₫ượctương tự con trỏ 20 Chương 10: Thuật toán tổng quát  Tổng quát hóa thuậttoánfind_max: template <typename ITERATOR> ITERATOR. 10: Thuật toán tổng quát Bài tậpvề nhà  Xây dựng thuậttoánsắpxếptổng quát ₫ể có thể áp dụng cho nhiềucấutrúcdữ liệutậphợp khác nhau cũng như nhiềutiêu chuẩnsắpxếp khác nhau. Viếtchương trình. pItem->getNext(); } return pMaxItem; } Â Cần tổng quát hóa phương pháp truy lặp phần tử! 19 Chương 10: Thuật toán tổng quát Bộ truy lặp (iterator)  Mục ₫ích: Tạomộtcơ chế thống nhấtchoviệctruylặpphầntử cho các cấutrúcdữ

Ngày đăng: 31/07/2014, 04:20

Từ khóa liên quan

Mục lục

  • Kỹ thuật lập trình

  • Nội dung chương 10

  • 10.1 Tổng quát hóa kiểu dữ liệu phần tử

  • 10.2 Tổng quát hóa phép toán cơ sở

  • Tham số khuôn mẫu cho phép toán

  • Ưu điểm của đối tượng hàm

  • Kết hợp 2 bước tổng quát hóa

  • Khuôn mẫu lớp cho các đối tượng hàm

  • 10.3 Tổng quát hóa truy lặp phần tử

  • Ví dụ thuật toán copy

  • Ví dụ thuật toán find_max

  • Bộ truy lặp (iterator)

  • Bổ sung bộ truy lặp cho kiểu Vector

  • Bổ sung bộ truy lặp cho kiểu List

  • Khuôn mẫu List cải tiến

  • Bài tập về nhà

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

Tài liệu liên quan