Advertisement
Derga

Untitled

May 24th, 2023
938
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.14 KB | None | 0 0
  1. #include <algorithm>
  2. #include <numeric>
  3. #include <stack>
  4. #include <queue>
  5. #include <array>
  6. #include <list>
  7. #include <forward_list>
  8. #include <vector>
  9.  
  10. #include <set>
  11.  
  12. #include <map>
  13.  
  14. #include <unordered_map>
  15. #include <unordered_set>
  16.  
  17. #include <iostream>
  18.  
  19. using namespace std;
  20.  
  21.  
  22. //forward_list односвязный список
  23. struct Node {
  24.     int value;
  25.     Node* next;
  26.     //конструктор по умолчанию. После : - значит,
  27.     //что инициализация проиходит в момент создания переменной
  28.     Node() : value(0), next(nullptr) {
  29.     };
  30.    
  31.     Node(int value, Node* n) : value(0), next(n) {
  32.     };
  33. };
  34.  
  35. //двусвязный список //list<>
  36. //Он содержит указатель на предыдущий (и на следующий тоже) элементы
  37. struct Node {
  38.     int value;
  39.     Node* next;
  40.     Node* prev;
  41.     //конструктор по умолчанию. После : - значит,
  42.     //что инициализация проиходит в момент создания переменной
  43.     Node() : value(0), next(nullptr), prev(nullptr) {
  44.     };
  45.  
  46.     Node(int value, Node* n, Node* p) : value(0), next(n), prev(p) {
  47.     };
  48. };
  49.  
  50.  
  51.  
  52. //stl - standart template library
  53. int main() {
  54.     stack<int> s; //FILO
  55.     s.push(1);
  56.     cout << s.top() << '\n';
  57.     s.pop();
  58.     s.empty(); //возвращает true, усли пустой
  59.    
  60.     queue<int> q; //FIFO
  61.    
  62.     q.push(1);
  63.     cout << q.front() << ' ' << q.back() << '\n';
  64.     q.pop();
  65.     cout << q.empty() << '\n';
  66.    
  67.     forward_list<int> fl;
  68.     fl.push_front(1);
  69.     cout << fl.front() << '\n';
  70.     //вставка элемента за константу
  71.     fl.insert_after(fl.begin(), 10); //так как это односвязный список вставляем после определенного элемента
  72.        
  73.     //вставка элемента за константу
  74.     list<int> l;
  75.     l.insert(l.begin(), 10); // тут свободно перемещаемся вперед и назад, вставлять значение легче.
  76.  
  77.     /*
  78.     Node nw;
  79.     Node n1;
  80.     auto o = n1->next;//&n2
  81.     n1->next = nw;
  82.     nw->next = o;
  83.  
  84.     n1->n2
  85.     o = n2
  86.     n1->nw
  87.     nw->n2
  88.     n1->nw->n2
  89.     */
  90.  
  91.     array<int, 26> a;
  92.     a.fill(0);
  93.    
  94.     set<int> se;//красночерное дерево - оно же бинарное дерево поиска, все операции за логорифм, кроме
  95.     //минимум и максимум за константу. Самобалансируется! (родительский элемент меняется - не обязательно самый верхний)
  96.    
  97.     se.insert(1); //log(n)
  98.     se.find(10); //log(n)
  99.     cout << se.contains(7) << '\n';
  100.     //элементы хранятся отсортированными
  101.  
  102.     map<int, string> mp; //такое же красночерное дерево, с такими асимптотиками, только каждый элемент хранит еще и значение
  103.  
  104.     unordered_set<int> st;
  105.     //добавление за o(1) обычно, в худшем случае за o(n)
  106.     //таблица со списками. (каждый элемент - список)
  107.    
  108.     //разные элементы возвращают одинаковые hash - коллизия
  109.     //метод открытой адресации.
  110.  
  111.     deque<int> d; //удаление из начала - O(1) //память выделена не одним кусоком, а чанками
  112.     //массивы
  113.  
  114.  
  115.  
  116.  
  117.     //end() - возвращает указатель" следующий за последним. (итератор - класс, по смыслу - указатель)
  118.     //другими словами begin() - возвращает итератор на начало итд
  119.     //универсальный дает способ обойти любую коллекцию кроме stack, queue
  120.     //random acces = vector, deque - есть операторы ++ -- +const -const. Можем попасть в любой элемент
  121.     //bidirectional list, set, map - есть операторы ++ --. Можем попасть в следующий и предыдущий.
  122.     //забыл называние типа итератора, есть толко ++, например forward_list. Можем попасть только в следующий
  123.     for (auto set_iterator = a.begin(); set_iterator != a.end(); set_iterator++) {
  124.         *set_iterator++;
  125.     }
  126.  
  127.     for (auto elem : se) {
  128.         cout << elem << ' ';
  129.     }
  130.  
  131.     auto set_iterator = se.begin();
  132.     set_iterator++;
  133.     set_iterator++;
  134.     set_iterator++;
  135.     *set_iterator++;
  136.     set_iterator--;
  137.  
  138.  
  139.     vector<int> v;
  140.     /*
  141.     int* Tpointer;
  142.     int size;
  143.     int capacity;
  144.  
  145.     int value = 7;
  146.     Tpointer = new int[100];
  147.     size = 1;
  148.     capacity = 100;
  149.     Tpointer[0] = value;
  150.  
  151.     size--;
  152.     */
  153.  
  154.     //инвалидация итератора
  155.     //пример
  156.     auto it = v.begin();
  157.     cout << *it;
  158.  
  159.     for (int i = 0; i < 1000000; ++i) {
  160.         v.push_back(100);
  161.     }
  162.     //тут много раз происходила реаллокация памяти для вектора. it смотрит на память, которую мы уже очистили
  163.    
  164.     //сортирует до правой границы. 1ый случай - до 5ого элемента, 2ой - весь вектор
  165.     sort(v.begin(), v.begin() + 5);
  166.     sort(v.begin(), v.end());
  167.     cout << accumulate(v.begin(), v.end(), 0); //этот алгоритм из модуля numeric
  168.     //count()
  169.     //count_if()
  170.  
  171.     struct Student {
  172.         string name;
  173.         int score;
  174.         int age;
  175.     };
  176.  
  177.     vector<Student> vs;
  178.    
  179.     sort(vs.begin(), vs.end(), [](const auto& lhs, const auto& rhs) {
  180.         if (lhs.score != rhs.score) {
  181.             return lhs.score < rhs.score;
  182.         }
  183.         if (lhs.age != rhs.age) {
  184.             reutrn lhs.age < rhs.age;
  185.         }
  186.         return lhs.name < rhs.name;
  187.     });
  188.  
  189.     Student vasya{ "Vasya", 100, 100 };
  190.     //[] - аргументы, которые нам нужны.
  191.     //[vasya] - передали по копии.[&vasya]- передали по копии.
  192.     //[=] передали все элементы по копии. [&] передали все элементы по ссылке
  193.     //третим параметром передали правилол сравнения (лямбда функцию), так как компилятор на сможет сам правильно определеить
  194.     //как сравнить структуру которую мы написали. (по каким полям сравнивать в первую, вторую, ... очередь)
  195.     sort(vs.begin(), vs.end(), [vasya](const auto& lhs, const auto& rhs) {
  196.         if (lhs.score != rhs.score) {
  197.             return lhs.score < rhs.score;
  198.         }
  199.         if (lhs.age != rhs.age) {
  200.             reutrn lhs.age < rhs.age;
  201.         }
  202.         return lhs.name < rhs.name;
  203.     });
  204.  
  205.     //переменная my_max - хранит лямбда функцию. тип переменной my_max выводит компилятор
  206.     auto my_max = [](int lhs, int rhs) {
  207.         if (lhs < rhs) {
  208.             return rhs;
  209.         }
  210.         return lhs;
  211.     };
  212.  
  213.     int a1 = 10;
  214.     int b1 = 20;
  215.     cout << my_max(a1, b1);
  216.  
  217.     //принимает третим параметром функцию-предикат. Предикат возвращает для каждого элемента true или false
  218.     //эта функция вернет количество семерок.
  219.     int count = count_if(begin(v), end(v), [] (const auto& elem) {
  220.         return elem == 7;
  221.     });
  222.    
  223.  
  224.     //функтор
  225.  
  226.     struct A {
  227.         int a = 10;
  228.         int operator()() {
  229.             return a;
  230.         }
  231.     };
  232.  
  233. }
  234.  
  235. struct deq{
  236.     int a[100];
  237.     deq* next;
  238. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement