С/C++: библиотека STL
vector - вектор
vector <тип_данных> имя_массива;
Вектор - динамический массив: его размер может меняться во время работы программы. Заголовочный файл - <vector>. Имена стандартной библиотеки записываются с префиксом std::.
- push_back(x) - добавляет элемент x в конец вектора
- size() - число элементов
- имя[i] - элемент с индексом i; индексы начинаются с 0, проверка выхода за границы не выполняется
- begin(), end() - итераторы на первый элемент и на позицию за последним элементом
- sort(begin(), end()) - сортировка по возрастанию; функция sort находится в заголовочном файле <algorithm>
В первом примере числа добавляются в вектор с помощью push_back, затем выводятся размер вектора, элементы по индексам и элементы при обходе итератором. Элемент по индексу можно не только читать, но и изменять.
Реализация на C++
#include <cstddef>
#include <iostream>
#include <vector>
int main() {
std::vector<int> data = {5, 3, 8, 1, 9, 2, 7}; // исходные числа
std::vector<int> v; // пустой вектор
for (int x : data) {
v.push_back(x); // добавляем элемент в конец вектора
}
std::cout << "size: " << v.size() << '\n'; // число элементов
std::cout << "v[0]: " << v[0] << '\n'; // индексы начинаются с 0
v[1] = 30; // элементу с индексом 1 присваиваем новое значение
std::cout << "v[1]: " << v[1] << '\n';
std::cout << "by index:";
for (std::size_t i = 0; i < v.size(); ++i) { // обход по индексам
std::cout << ' ' << v[i];
}
std::cout << '\n';
std::cout << "by iterator:";
for (auto it = v.begin(); it != v.end(); ++it) { // обход итератором от begin() до end()
std::cout << ' ' << *it;
}
std::cout << '\n';
return 0;
}
Функция sort переставляет элементы от begin() до end() (не включая end()) в порядке возрастания. Пример выводит вектор до сортировки и после неё.
Реализация на C++
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {5, 3, 8, 1, 9, 2, 7}; // исходный вектор
std::cout << "before:";
for (int x : v) {
std::cout << ' ' << x;
}
std::cout << '\n';
std::sort(v.begin(), v.end()); // сортировка по возрастанию: от begin() до end()
std::cout << "after:";
for (int x : v) {
std::cout << ' ' << x;
}
std::cout << '\n';
return 0;
}
set - множество
set <тип_данных> имя_множества;
Множество хранит только различные элементы и держит их в порядке возрастания (по оператору <). Заголовочный файл - <set>.
- insert(x) - добавляет элемент x; если такой элемент уже есть, множество не меняется
- find(x) - итератор на элемент x или end(), если элемента нет
- count(x) - число элементов, равных x: 1 или 0
- erase(x) - удаляет элемент x; erase(it) - удаляет элемент, на который указывает итератор it
- size() - число элементов
- begin(), end() - обход элементов от наименьшего к наибольшему
Программа добавляет в множество числа с повторами, проверяет наличие элементов и удаляет два из них. Итератор, который возвращает find, нужно сравнить с end() до его использования.
Реализация на C++
#include <iostream>
#include <set>
#include <vector>
int main() {
std::vector<int> data = {5, 1, 4, 1, 3, 9, 2, 6, 5}; // исходные числа, есть повторы
std::set<int> s; // пустое множество
for (int x : data) {
s.insert(x); // повтор уже имеющегося элемента ничего не меняет
}
std::cout << "size: " << s.size() << '\n'; // число различных элементов
std::cout << "count(4): " << s.count(4) << '\n'; // 1: элемент есть
std::cout << "count(7): " << s.count(7) << '\n'; // 0: элемента нет
auto it = s.find(6); // итератор на элемент 6
if (it != s.end()) { // find возвращает end(), если элемента нет
std::cout << "found: " << *it << '\n';
}
if (s.find(7) == s.end()) {
std::cout << "7 not found\n";
}
s.erase(4); // удаление по значению
auto nine = s.find(9);
if (nine != s.end()) {
s.erase(nine); // удаление по итератору
}
std::cout << "elements:";
for (int x : s) { // обход в порядке возрастания
std::cout << ' ' << x;
}
std::cout << '\n';
return 0;
}
Повторы не сохраняются, а обход выводит элементы в порядке возрастания, хотя добавлялись они в другом порядке.
map - ассоциативный массив
map <тип_данных_ключа, тип_данных_значения> имя_массива;
- begin() - итератор на первый элемент
- end() - итератор на последний элемент
- empty() - true, если контейнер пуст
- count(key) - число элементов с заданным ключом (в map 1 или 0)
- find(key) - итератор на элемент с указанным ключом
- erase(it), erase(start,end) - удаляет элемент с заданным итератором или между заданными
- size() - число элементов
- clear() - полная очистка контейнера