Website Summary Files Commits Branches @commit @diff @stats
path: root / Seminar05 / list-cheat-sheet.cpp
blob: ee5f906186d5d64d1b8bd74e5e026d2850e555c1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<list>
#include<iostream>

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 >");
}