Skip to content

Instantly share code, notes, and snippets.

@maleksware
Created June 14, 2022 11:37
Show Gist options
  • Select an option

  • Save maleksware/fe2abf68ab71153307e0a0873fc0cf98 to your computer and use it in GitHub Desktop.

Select an option

Save maleksware/fe2abf68ab71153307e0a0873fc0cf98 to your computer and use it in GitHub Desktop.

Надежные сведения можно украсть с сайта 179 школы:

https://server.179.ru/tasks/cpp/total/

Списки

Массивная реализация

Инициализация
s = list()
s = []
s = [69, 228, 1000, 7, 42]
int s[10];
Добавление элемента
s.append(element)
s[i] = element;
Удаление элемента
s.remove(element)
// Только костыльная реализация
Вставка элемента
s.insert(index, element)
// Только костыльная реализация
Обращение по индексу
s[i]
s[i];
Получение элемента с удалением
s.pop(i)
s.pop()
// Только костыльная реализация (см. удаление и обращение по индексу)
Очистка
s.clear()
s = []
s = list()
int s[1];
Сортировка
s.sort()
s = sorted(s)
#include <algorithm>
std::sort(std::begin(s), std::end(s));

// или

#include <algorithm>
std::sort(s.begin(), s.end());
Поиск индекса по значению
s.index(element)
std::distance(arr, std::find(arr, arr + arr_size, element));
Переворот
s.reverse()
// Нет стандартной функции или метода

Векторы

Инициализация
s = list()
s = []
s = [69, 228, 1000, 7, 42]
#include <vector>

vector<int> s;
vector<int> s(10);
vector<int> s = {69, 228, 1000, 7, 42};
Добавление элемента
s.append(element)
s.push_back(element);
Удаление элемента
s.remove(element)
remove(left, right, element)

// используется как

remove(s.begin(), s.end(), element)
Вставка элемента
s.insert(index, element)
s.insert(index, element);

// index - указатель на элемент, в который нужно произвести вставку

s.insert(s.begin() + index, element)
Обращение по индексу
s[i]
s[i];
Очистка
s.clear()
s = []
s = list()
s = {};
s.clear();
Сортировка
s.sort()
s = sorted(s)
#include <algorithm>
std::sort(std::begin(s), std::end(s));

// или

#include <algorithm>
std::sort(s.begin(), s.end());
Поиск индекса по значению
s.index(element)
s.find(s.begin(), s.end(), element) - s.begin();
Переворот
s.reverse()
std::reverse(s.begin(), s.end());

Множества за O(log n) с упорядоченными элементами

Заметка: в Python множества работают на хеш-таблицах и за O(1).

Инициализация
s = set()
#include <set>
set<int> s;
Добавление элемента
s.add(element)
s.insert(element);
Удаление элемента
s.remove(element)
s.erase(element);

// либо по индексу через итератор

s.erase(s.begin() + index);
Проверка нахождения элемента
element in s
s.count(element) == 1;

// или через find();

s.find(element) != s.end();
Операции на множествах
a | b

a & b

a - b
set<int> intersect;
set_intersection(a.begin(), a.end(), b.begin(), b.end(), intersect.begin());

set<int> union_set;
set_union(a.begin(), a.end(), b.begin(), b.end(), union_set.begin());

set<int> difference;
set_difference(a.begin(), a.end(), b.begin(), b.end(), difference.begin());
Очистка
s.clear()
s = set()
s.clear();

Множества за O(1) с неупорядоченными элементами

Инициализация
s = set()
#include <set>
unordered_set<int> s;
Добавление элемента
s.add(element)
s.insert(element);
Удаление элемента
s.remove(element)
s.erase(element);
Проверка нахождения элемента
element in s
s.count(element) == 1;

// или через find();

s.find(element) != s.end();
Операции на множествах
a | b

a & b

a - b
unordered_set<int> intersect;
set_intersection(a.begin(), a.end(), b.begin(), b.end(), intersect.begin());

unordered_set<int> union_set;
set_union(a.begin(), a.end(), b.begin(), b.end(), union_set.begin());

unordered_set<int> difference;
set_difference(a.begin(), a.end(), b.begin(), b.end(), difference.begin());
Очистка
s.clear()
s = set()
s.clear();

Словарь (хеш-таблица) за O(1) c неупорядоченными элементами

Инициализация

s = {}
s = dict()
#include <unordered_map>
unordered_map<string, int> s;

Вставка элементов

s[key] = value
s.insert(make_pair(key, value))

// но можно просто присвоить значение

Удаление элементов

del s[key]
s.erase(s.find(key));

Присвоение элементов

s[key] = value
s[key] = value;

Обращение к элементам

a = s[key]
a = s[key];

Проверка на принадлежность элемента

key in s
s.find(key) != s.end();

Итерирование

for key, value in s.items():
    pass
unordered_map<string, int>::iterator it;
for (it = s.begin(); it != s.end(); it++) {
  key = *it.first;
  value = *it.second;
}

// или

for (auto p: s) {
  key = p.first;
  value = p.second;
}

// p - pair на key и value, it - указатель на них

Очистка

s = {}
s = dict()
s.clear();

Словарь (дерево) за O(log n) c упорядоченными элементами

Код на Python приведен для справки, так как работает с другой асимптотикой

Инициализация

s = {}
s = dict()
#include <map>
map<string, int> s;

Вставка элементов

s[key] = value
s.insert(make_pair(key, value))

// но можно просто присвоить значение

Удаление элементов

del s[key]
s.erase(s.find(key));

Присвоение элементов

s[key] = value
s[key] = value;

Обращение к элементам

a = s[key]
a = s[key];

Проверка на принадлежность элемента

key in s
s.find(key) != s.end();

Итерирование

for key, value in s.items():
    pass
map<string, int>::iterator it;
for (it = s.begin(); it != s.end(); it++) {
  key = *it.first;
  value = *it.second;
}

// или

for (auto p: s) {
  key = p.first;
  value = p.second;
}

// p - pair на key и value, it - указатель на них

Очистка

s = {}
s = dict()
s.clear();

Строки

Инициализация

s = ""
#include <string>

string s;

Конкатенация

s = a + b
s = a + b;

Строка в вектор char

s = list(s)
vector<char> v(s.begin(), s.end());

Вектор char в строку

s = "".join(v)
string s(v.begin(), v.end());

Обращение к элементам

s[index]
s[index];

Добавление в конец

s += element
s.push_back(element);

Подстрока

s[start:start + length]
s.substr(start, length);

Длина

len(s)
s.size();

Очистка

s = ""
s = str()
s.clear();

Подробнее о строках: https://server.179.ru/tasks/cpp/total/161.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment