Активный
- Тема Автор
- #1
STL предоставляет готовые структуры данных. Разберем основные контейнеры.
vector - динамический массив
list - двусвязный список
map - ассоциативный массив
set - множество
queue - очередь
stack - стек
deque - двусторонняя очередь
Алгоритмы STL
Важные моменты:
- Выбирайте правильный контейнер для задачи
- Используйте итераторы для обхода
- Применяйте алгоритмы STL
- Учитывайте сложность операций
STL упрощает работу с данными в C++!
vector - динамический массив
Код:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// Создание
vector<int> numbers;
// Добавление элементов
numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(3);
// Доступ к элементам
cout << "Первый элемент: " << numbers[0] << endl;
cout << "Размер: " << numbers.size() << endl;
// Итерация
for(int i = 0; i < numbers.size(); i++) {
cout << numbers[i] << " ";
}
cout << endl;
// Итераторы
for(vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// Range-based for
for(int num : numbers) {
cout << num << " ";
}
cout << endl;
return 0;
}
list - двусвязный список
Код:
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> numbers;
// Добавление
numbers.push_back(1);
numbers.push_front(0);
numbers.push_back(2);
// Итерация
for(list<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// Удаление
numbers.remove(1);
// Сортировка
numbers.sort();
return 0;
}
map - ассоциативный массив
Код:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> ages;
// Добавление
ages["John"] = 25;
ages["Jane"] = 30;
ages["Bob"] = 35;
// Доступ
cout << "John's age: " << ages["John"] << endl;
// Проверка существования
if(ages.find("John") != ages.end()) {
cout << "John found" << endl;
}
// Итерация
for(map<string, int>::iterator it = ages.begin(); it != ages.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
// Range-based for
for(auto& pair : ages) {
cout << pair.first << ": " << pair.second << endl;
}
return 0;
}
set - множество
Код:
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> numbers;
// Добавление
numbers.insert(3);
numbers.insert(1);
numbers.insert(2);
numbers.insert(3); // дубликат игнорируется
// Проверка наличия
if(numbers.find(2) != numbers.end()) {
cout << "2 found" << endl;
}
// Итерация
for(int num : numbers) {
cout << num << " ";
}
cout << endl;
return 0;
}
queue - очередь
Код:
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q;
// Добавление
q.push(1);
q.push(2);
q.push(3);
// Доступ к первому элементу
cout << "Front: " << q.front() << endl;
// Удаление
q.pop();
// Размер
cout << "Size: " << q.size() << endl;
return 0;
}
stack - стек
Код:
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
// Добавление
s.push(1);
s.push(2);
s.push(3);
// Доступ к верхнему элементу
cout << "Top: " << s.top() << endl;
// Удаление
s.pop();
// Размер
cout << "Size: " << s.size() << endl;
return 0;
}
deque - двусторонняя очередь
Код:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> dq;
// Добавление с обеих сторон
dq.push_back(1);
dq.push_front(0);
dq.push_back(2);
// Доступ
cout << "Front: " << dq.front() << endl;
cout << "Back: " << dq.back() << endl;
// Удаление
dq.pop_front();
dq.pop_back();
return 0;
}
Алгоритмы STL
Код:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6};
// Сортировка
sort(numbers.begin(), numbers.end());
// Поиск
if(find(numbers.begin(), numbers.end(), 5) != numbers.end()) {
cout << "5 found" << endl;
}
// Подсчет
int count = count_if(numbers.begin(), numbers.end(),
[](int n) { return n > 5; });
cout << "Numbers > 5: " << count << endl;
// Трансформация
transform(numbers.begin(), numbers.end(), numbers.begin(),
[](int n) { return n * 2; });
return 0;
}
Важные моменты:
- Выбирайте правильный контейнер для задачи
- Используйте итераторы для обхода
- Применяйте алгоритмы STL
- Учитывайте сложность операций
STL упрощает работу с данными в C++!