35657

Untitled

Jul 26th, 2023
801
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6.  
  7. template <typename C>
  8. void Print(C cont) {
  9.     for (auto it = cont.begin(); it != cont.end(); it++) {
  10.         std::cout << *it << " ";
  11.     }
  12.     std::cout << std::endl;
  13. }
  14.  
  15.  
  16. bool ReversSort(int a, int b) {
  17.     return a > b;
  18. }
  19.  
  20.  
  21. int main() {
  22.  
  23.     std::vector<int> numbers{89, 42, 6, 14, 81, 91, 28, 64, 48, 66, 55, 17, 85, 22, 22, 63, 81, 45, 29, 67, 52, 47, 23, 98, 3, 32, 71, 53, 93, 49, 60, 88, 59, 37, 68, 55, 29, 73, 42, 45};
  24.  
  25.     Print(numbers);
  26.  
  27.     std::sort(numbers.begin(), numbers.end()); // сортировка по умолчанию (по возрастанию)
  28.  
  29.     Print(numbers);
  30.  
  31.     std::sort(numbers.begin(), numbers.end(), ReversSort); // сортировка по указанным критериям
  32.  
  33.     Print(numbers);
  34.  
  35.     std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; }); // то же, но с лямбла-функцией
  36.  
  37.     Print(numbers);
  38.  
  39.     std::cout << std::count(numbers.begin(), numbers.end(), 29); // получаем количество вхождений указанного числа во всем контейнере
  40.  
  41.     std::cout << std::endl;
  42.  
  43.     auto it = numbers.begin() + numbers.size() / 2; // получаем итератор на середину контейнера
  44.  
  45.     std::cout << std::count(it, numbers.end(), 29); //  получаем количество вхождений указанного числа начиная от середины контейнера
  46.  
  47.     std::cout << std::endl;
  48.  
  49.     std::cout << std::count_if(numbers.begin(), numbers.end(), [](int a) { return a % 2 == 0; }); // получаем количество элементов, удовлетворяющих заданным условиям
  50.  
  51.     std::cout << std::endl;
  52.  
  53.     it = std::find(numbers.begin(), numbers.end(), 29); // возвращает итератор на элемент либо end() если элемент не был найден
  54.  
  55.     if (it != numbers.end()) {
  56.         std::cout << *it << std::endl;
  57.     }
  58.  
  59.     it = std::find_if(numbers.begin(), numbers.end(), [](int a) {return a > 50; }); // возвращает итератор на элемент, который удовлетворяет заданным условиям, либо end() если элемент не был найден
  60.  
  61.     if (it != numbers.end()) {
  62.         std::cout << *it << std::endl;
  63.     }
  64.  
  65.     it = std::remove(numbers.begin(), numbers.end(), 55); // удаляет элементы, равные указанному значению, путем сдвига элементов влево
  66.  
  67.     numbers.erase(it, numbers.end()); // не забываем удалять лишние элементы
  68.  
  69.     Print(numbers);
  70.  
  71.     it = std::remove_if(numbers.begin(), numbers.end(), [](int a) {return a > 20 && a < 30; }); // удаляет элементы, удовлетворяющие указанному условию, путем сдвига элементов влево
  72.  
  73.     numbers.erase(it, numbers.end()); // не забываем удалять лишние элементы
  74.  
  75.     //numbers.erase(std::remove_if(numbers.begin(), numbers.end(), [](int a) {return a > 20 && a < 30; }), numbers.end()); // вариант объединения двух команд в одну строку
  76.  
  77.     Print(numbers);
  78.  
  79.     std::replace(numbers.begin(), numbers.end(), 45, 46); // заменить все элементы, которые равны 93 на 95
  80.  
  81.     Print(numbers);
  82.  
  83.     std::replace_if(numbers.begin(), numbers.end(), [](int a) {return a < 20; }, 1); // заменить все элементы меньше 20 на единицу
  84.  
  85.     Print(numbers);
  86.  
  87.     it = std::unique(numbers.begin(), numbers.end()); // удаляет дубликаты путем перемещения элементов влево
  88.  
  89.     numbers.erase(it, numbers.end()); // не забываем удалять лишние элементы
  90.  
  91.     Print(numbers);
  92.  
  93.     it = std::upper_bound(numbers.begin(), numbers.end(), 67); // двоичный поиск в отсортированном массиве
  94.  
  95.     std::cout << *it << std::endl;
  96.  
  97.     std::for_each(numbers.begin(), numbers.end(), [](int& a) { a *= 2; }); // применяем указанную функцию ко всем элементам в указанном диапазоне (не забываем принимать аргумент в лямбду по неконстантной ссылке)
  98.  
  99.     Print(numbers);
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment