PDF Google Drive Downloader v1.1


Báo lỗi sự cố

Nội dung text Basic Usage Guide for C++ STL.pdf

Object-Oriented Programming - LAB SE Page 1 Iterators in STL − The Standard Template Library (STL) provides a collection of pre-designed template classes and functions, allowing for the efficient and easy use of common data structures and algorithms. − In the C++ Standard Template Library (STL), all containers provide iterators as a solution for traversing their elements. This is especially crucial for containers that lack an indexing operator, such as std::list, where iterators are the only way to access elements. Essentially, an iterator is simply a new data type declared within the container class itself. − To use the template functions in the STL, you must build a class that provides standard iterator functionalities. File “MyList.h” #include using namespace std; template class MyList { private: struct Node { T _info; Node* _pNext; }; Node* _pHead, * _pTail; int _n; static Node* CreateNode(const T& value) { Node* node = new Node{ value, nullptr }; return node; } public: /// Declaring the Iterator class (User-defined data type within a class) class Iterator; MyList(); ~MyList(); void AddHead(const T&); void AddTail(const T&); void RemoveHead(); void RemoveTail(); void Clear(); /// --- Iterator Access --- Iterator begin() { return Iterator(_pHead); } SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT

Object-Oriented Programming - LAB SE Page 3 } if (_pHead == nullptr) { _pHead = _pTail = node; _n++; return; } _pTail->_pNext = node; _pTail = node; _n++; } template void MyList::AddHead(const T& value) { // Implement the code yourself } template void MyList::RemoveHead() { if (_pHead == nullptr) { return; } Node* node = _pHead; _pHead = _pHead->_pNext; _n--; if (_pHead == nullptr) { _pTail = nullptr; } } template void MyList::RemoveTail() { // Implement the code yourself } /// The code implementation for the Iterator class template class MyList::Iterator { public: // Necessary type aliases for iterator traits (for STL compatibility) using iterator_category = forward_iterator_tag; // Forward-only iteration using difference_type = ptrdiff_t; using value_type = T; using pointer = T*; using reference = T&; private: Node* current_node; Iterator(Node* node) : current_node(node) {} friend class MyList; public: Iterator() : current_node(nullptr) {} SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT
Object-Oriented Programming - LAB SE Page 4 reference operator*() const { if (!current_node) { throw out_of_range("Dereferencing end() or null iterator"); } return current_node->_info; } pointer operator->() const { if (!current_node) { throw out_of_range("Accessing member via end() or null iterator"); } return &(current_node->_info); } Iterator& operator++() { if (current_node) { current_node = current_node->_pNext; } else { throw out_of_range("Incrementing end() or null iterator"); } return *this; } Iterator operator++(int) { if (!current_node) { throw out_of_range("Incrementing end() or null iterator"); } Iterator temp = *this; current_node = current_node->next; return temp; } bool operator==(const Iterator& other) const { return current_node == other.current_node; } bool operator!=(const Iterator& other) const { return !(*this == other); } }; File “main.cpp” #include"MyList.h" #include void fnAction(int val) { cout << val << ", "; } void fnAction2(int &val) { val *= 2; } bool fnPredict(int val) { const int threshold = 3; return val > threshold; } SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT SE@FIT

Tài liệu liên quan

x
Báo cáo lỗi download
Nội dung báo cáo



Chất lượng file Download bị lỗi:
Họ tên:
Email:
Bình luận
Trong quá trình tải gặp lỗi, sự cố,.. hoặc có thắc mắc gì vui lòng để lại bình luận dưới đây. Xin cảm ơn.