Содержание
- 2. Двусторонняя очередь (Deque) deque - вид последовательности, которая, подобно вектору, поддерживает итераторы произвольного доступа. Кроме того
- 3. Когда что применять - vectоr - тип последовательности, которая используется по умолчанию. - list нужно использовать,
- 4. deque можно рассматривать как vector , чья внутренняя память разделена на части. deque хранит блоки, или
- 5. Рассмотрите возможность предпочтения deque по умолчанию вместо vector, особенно когда содержащийся тип является классом или структурой,
- 6. Страничная организация дека дает значительные преимущества: 1. deque предлагает операции insert() и erase() с постоянным временем
- 7. template class Allocator = allocator> class deque { public: // typedefs: typedef iterator; typedef const_iterator; typedef
- 8. // размещение/удаление: deque(); deque(size_type n, const T& value = T()); deque(const deque & x); template deque(InputIterator
- 9. // средства доступа: iterator begin(); const_iterator begin() const; iterator end(); const_iterator end() const; reverse_iterator rbegin(); const_reverse_iterator
- 10. // вставка/стирание: void push_front(const T& x); void push_back(const T& x); iterator insert(iterator position, const T& x
- 11. iterator - итератор произвольного доступа, ссылающийся на T. Точный тип зависит от исполнения и определяется в
- 12. assign присвоить контейнеру данные push_back вставить в конец push_front вставить в начало pop_back удалить последний pop_front
- 13. insert insert (вставка) в середину двусторонней очереди делает недействительными все итераторы и ссылки двусторонней очереди. insert
- 14. Пример #include #include #include int main () { std::deque mydeque; // установить некоторые начальные значения: for
- 15. std::cout for ( it=mydeque.begin(); it != mydeque.end(); ++it) std::cout std::cout return 0; } Output: mydeque contains:
- 16. erase erase (стирание) в середине двусторонней очереди делает недействительными все итераторы и ссылки двусторонней очереди. erase
- 17. Пример #include #include int main () { std::deque mydeque; // установить некоторые значения (от 1 до
- 18. Пример еще #include ‹iostream.h› #include int main() { deque d; d.push_back(4); // Add after end. d.push_back(9);
- 19. push_front #include #include int main () { std::deque mydeque (2,100); // two ints with a value
- 20. pop_front Удаляет первый элемент в контейнере deque, эффективно уменьшая его размер на единицу, разрушая удаленный элемент.
- 21. Изменение элементов очереди Функция assign() позволяет заменить все элементы очереди определенным набором. Она имеет следующие формы:
- 22. swap обменивает значениями две очереди: std::deque deque1 = { 1, 2, 3, 4, 5 }; std::deque
- 23. Удаление элементов clear(p): удаляет все элементы pop_back(): удаляет последний элемент pop_front(): удаляет первый элемент erase(p): удаляет
- 24. std::deque numbers = { 1, 2, 3, 4, 5 }; numbers.pop_front(); // numbers = { 2,
- 25. Адаптеры контейнеров
- 26. Часто бывает полезно обеспечить ограниченные интерфейсы контейнеров. Библиотека STL предоставляет stack, queue и priority_queue через адаптеры,
- 27. stack Любая последовательность, поддерживающая операции back, push_back и pop_back, может использоваться для адаптации stack. В частности,
- 28. protected: Container c; public: bool empty() const { return c.empty(); } size_type size() const { return
- 29. В структуре данных стек данные организованы по принципу: последний вошел в стек - первый вышел из
- 30. Т.е. стек реализован не с нуля, он просто является адаптацией класса std::list (или vector или deque)
- 31. Пример #include #include #include #include using namespace std; int main( int argc, char *argv[ ]) {
- 32. stack::top #include // std::cout #include // std::stack int main () { std::stack mystack; mystack.push(10); mystack.push(20); mystack.top()
- 33. Заголовок, определяющий классы адаптера контейнеров queue и priority_queue: В хидере определяются шаблонные классы: Очередь : FIFO
- 34. Очередь (queue) Любая последовательность, поддерживающая операции front, push_back и pop_front, может использоваться для адаптации queue. В
- 35. protected: Container c; public: bool empty() const {return c.empty();} size_type size() const {return c.size();} value_type& front()
- 36. Пример #include #include #include using namespace std; int main(int argc, char* argv[ ]) { setlocale(LC_ALL, "rus");
- 37. Пример #include #include #include #include int main () { std::deque mydeck (3,100); // deque с 3
- 38. push и pop push вставляет новый элемент в конце очереди, после его текущего последнего элемента. Содержимое
- 39. Пример #include // std::cin, std::cout #include // std::queue int main () { std::queue myqueue; int myint;
- 40. Очередь с приоритетами (priority_queue ) Любая последовательность, с итератором произвольного доступа и поддерживающая операции front, push_back
- 41. public: priority_queue(const Compare& х = Compare()): c(), comp(х) { } template priority_queue(InputIterator first, InputIterator last, const
- 42. Очереди с приоритетом - это тип контейнерных адаптеров, специально разработанных таким образом, чтобы его первый элемент
- 43. Способы реализации очереди с приоритетами В очереди с приоритетами каждому элементу ставится в соответствие приоритет (весовой
- 44. priority_queue::top #include #include int main () { std::priority_queue mypq; mypq.push(10); mypq.push(20); mypq.push(15); std::cout return 0; }
- 45. priority_queue::emplace #include #include #include int main () { std::priority_queue mypq; mypq.emplace("orange"); mypq.emplace("strawberry"); mypq.emplace("apple"); mypq.emplace("pear"); std::cout while
- 46. priority_queue::swap #include #include int main () { std::priority_queue foo,bar; foo.push (15); foo.push(30); foo.push(10); bar.push (101); bar.push(202);
- 47. Создание динамически связываемой библиотеки (DLL) на C++ Поскольку лекция получилась маленькая, то я решил добавить сюда
- 50. Теперь найдём в проекте файл myDLL.cpp и добавим туда код : #include #include using namespace std;
- 51. Используем эту библиотеку в другом проекте. В Visual Studio добавим в решение (solution) классическое приложение testMyDLL.
- 54. Затем, прописываем путь путь к файлу myDLL.h из соседнего проекта библиотеки DLL. #include "..\\MyDll\MyDll.h" В функцию
- 56. Для разнообразия я добавил в класс еще нестатическую функцию-член: string MYDLL_API str(); И определил ее так:
- 58. Скачать презентацию