Website Summary Files Commits Branches @commit @diff @stats
path: root / Seminar05 / list-cheat-sheet.cpp
diff options
context:
space:
mode:
Commit7eee5a78005a9a569186d2c8b4b645a818ab9bf1 (patch)
Author
 Stoycho Kyosev <skyosev@192.168.100.17>
2024-10-06 07:04:44 -0400
Committer
 Stoycho Kyosev <skyosev@192.168.100.17>
2024-10-06 07:04:44 -0400
Files84594e0af29cefa5aae76ace5f8eb81484400e31 /Seminar05/list-cheat-sheet.cpp
Data-structures-and-algorithms-7eee5a78005a9a569186d2c8b4b645a818ab9bf1.tar
Data-structures-and-algorithms-7eee5a78005a9a569186d2c8b4b645a818ab9bf1.tar.gz
Data-structures-and-algorithms-7eee5a78005a9a569186d2c8b4b645a818ab9bf1.zip
Parent0841635826cb03c0e74cd75ec3c97c4c3b594d8b (diff)
Cleanup
1 files changed, 0 insertions, 122 deletions
-rw-r--r--Seminar05/list-cheat-sheet.cpp122
diff --git a/Seminar05/list-cheat-sheet.cpp b/Seminar05/list-cheat-sheet.cpp
deleted file mode 100644
index fd68300..0000000
--- a/Seminar05/list-cheat-sheet.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#include<list>
-#include<iostream>
-#include"../Seminar04/linked-list-utils.h"
-
-// Пример как да напишем една и съща функция
-// Чрез итератори и чрез пойнтър представянето
-
-// Функцията map приема свързан списък и функция която приема int
-// и прилага функцията върху всеки елемент от списъка
-void mapOnSTLList(std::list<int>& ll, void (*f)(int&)) {
- for(int& elem : ll)
- f(elem);
-}
-
-void mapOnListRepresentedAsPointer(LinkedListNode<int>* ll, void (*f)(int&)) {
- while(ll) {
- f(ll->data);
- ll = ll->next;
- }
-}
-
-//.....
-
-void printList(const std::list<int>& myList, const char* msg) {
- if(msg != "")
- std::cout << msg << std::endl;
-
- // range based for loop който извежда всички елементи на списъка
- for(const int& elementInList : myList)
- std::cout << elementInList << " ";
- std::cout << std::endl;
-}
-
-int main() {
- std::list<int> myList;
-
- const auto f = myList.begin();
-
- // Добави елемент в края на листа
- for (int i = 0; i < 10; i++)
- myList.push_back(i);
-
- // Добави елемент в началото на листа
- for(int i = 10; i < 20; i++)
- myList.push_front(i);
-
- printList(myList, "Added the elements from [0..9] to the back and [10..19] to the front");
-
- // Можем да изтриваме елементи на позиция
- myList.erase(myList.begin());
- printList(myList, "Erased the first element");
-
- // Удобен начин да обърнем списък
- myList.reverse();
- printList(myList, "Reversed the linked list");
-
- // Можем да премахнем елемент
- myList.remove(10);
- printList(myList, "After removing 10 from the list");
-
- // Можем да премахнем всички елементи, които отговарят на някакъв предикат
- // Аргумента на remove_if е булева функция. Ще останат само тези за които условието е лъжа.
- myList.remove_if([](const int& currentElement) -> bool { return currentElement % 2; });
- printList(myList, "Filter all odd elements");
-
- // myList.begin(); begin iterator
- // myList.end(); end iterator
-
- // myList.cbegin(); constang begin iterator
- // myList.cend(); constant end iterator
-
- // Мога да създавам списъци така
- std::list<int> second{1, 2, 3, 4, 5};
- printList(second, "Create second list with initializer list");
-
- // Премества елементи от един лист в друг
- myList.splice(myList.begin(), second);
- printList(myList, "First list after splice");
- printList(second, "second list after splice");
-
- // Да си върнем малко елементи във втория списък
- second.assign({1, 2, 3, 4, 5});
- printList(second, "Second list after .assign({1, 2, 3, 4, 5})");
-
- // Можем да сортираме листа
- myList.sort();
- printList(myList, "First list after beigg sorted");
-
- // Можем и да го сортираме наобратно
- myList.sort([](const int& fst, const int& snd) -> bool { return fst > snd; });
- printList(myList, "First list after being sorted with >");
-
- LinkedListNode<int>* pointreLinkedlist =
- new LinkedListNode<int>(1,
- new LinkedListNode<int>(2,
- new LinkedListNode<int>(3,
- new LinkedListNode<int>(4,
- new LinkedListNode<int>(5)))));
-
- mapOnListRepresentedAsPointer(pointreLinkedlist, [](int& x) -> void {x = 2*x; });
- mapOnSTLList(second, [](int& x) -> void { x = 2*x; });
-
- printList(second, "Second list after mappint 2*");
- std::cout << "Pointer linked list after mappint 2* " << std::endl;
- printLinkedList(pointreLinkedlist);
- std::cout << std::endl;
-
- // Как да добавяме елементи на произволна позиция?
-
- // Итератор към началото
- std::list<int>::iterator it = myList.begin();
-
- // Отиваме на позицията
- for (size_t i = 0; i < 2; i++) {
- ++it;
- }
-
- // Добавяме
- myList.insert(it, 10000);
- // insert може да вмъква и цели рейнджове
- printList(myList, "My list after adding 10000 in third pos");
-} \ No newline at end of file