Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- template <typename C>
- void Print(C cont) {
- for (auto it = cont.begin(); it != cont.end(); it++) {
- std::cout << *it << " ";
- }
- std::cout << std::endl;
- }
- bool ReversSort(int a, int b) {
- return a > b;
- }
- int main() {
- 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};
- Print(numbers);
- std::sort(numbers.begin(), numbers.end()); // сортировка по умолчанию (по возрастанию)
- Print(numbers);
- std::sort(numbers.begin(), numbers.end(), ReversSort); // сортировка по указанным критериям
- Print(numbers);
- std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; }); // то же, но с лямбла-функцией
- Print(numbers);
- std::cout << std::count(numbers.begin(), numbers.end(), 29); // получаем количество вхождений указанного числа во всем контейнере
- std::cout << std::endl;
- auto it = numbers.begin() + numbers.size() / 2; // получаем итератор на середину контейнера
- std::cout << std::count(it, numbers.end(), 29); // получаем количество вхождений указанного числа начиная от середины контейнера
- std::cout << std::endl;
- std::cout << std::count_if(numbers.begin(), numbers.end(), [](int a) { return a % 2 == 0; }); // получаем количество элементов, удовлетворяющих заданным условиям
- std::cout << std::endl;
- it = std::find(numbers.begin(), numbers.end(), 29); // возвращает итератор на элемент либо end() если элемент не был найден
- if (it != numbers.end()) {
- std::cout << *it << std::endl;
- }
- it = std::find_if(numbers.begin(), numbers.end(), [](int a) {return a > 50; }); // возвращает итератор на элемент, который удовлетворяет заданным условиям, либо end() если элемент не был найден
- if (it != numbers.end()) {
- std::cout << *it << std::endl;
- }
- it = std::remove(numbers.begin(), numbers.end(), 55); // удаляет элементы, равные указанному значению, путем сдвига элементов влево
- numbers.erase(it, numbers.end()); // не забываем удалять лишние элементы
- Print(numbers);
- it = std::remove_if(numbers.begin(), numbers.end(), [](int a) {return a > 20 && a < 30; }); // удаляет элементы, удовлетворяющие указанному условию, путем сдвига элементов влево
- numbers.erase(it, numbers.end()); // не забываем удалять лишние элементы
- //numbers.erase(std::remove_if(numbers.begin(), numbers.end(), [](int a) {return a > 20 && a < 30; }), numbers.end()); // вариант объединения двух команд в одну строку
- Print(numbers);
- std::replace(numbers.begin(), numbers.end(), 45, 46); // заменить все элементы, которые равны 93 на 95
- Print(numbers);
- std::replace_if(numbers.begin(), numbers.end(), [](int a) {return a < 20; }, 1); // заменить все элементы меньше 20 на единицу
- Print(numbers);
- it = std::unique(numbers.begin(), numbers.end()); // удаляет дубликаты путем перемещения элементов влево
- numbers.erase(it, numbers.end()); // не забываем удалять лишние элементы
- Print(numbers);
- it = std::upper_bound(numbers.begin(), numbers.end(), 67); // двоичный поиск в отсортированном массиве
- std::cout << *it << std::endl;
- std::for_each(numbers.begin(), numbers.end(), [](int& a) { a *= 2; }); // применяем указанную функцию ко всем элементам в указанном диапазоне (не забываем принимать аргумент в лямбду по неконстантной ссылке)
- Print(numbers);
- }
Advertisement
Add Comment
Please, Sign In to add comment