/
haseew
/
Lab_7
Обзор
Документация
Войти
/
haseew
/
Lab_7
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Algorithms.cpp
47 строк
2 KB
Egorchik
Lab_7
12 май 2026, 17:22
12 май 2026, 17:22
d36efc2
Код
Авторство
О чём код?
#include "Algorithms.h" #include <iostream> #include <vector> #include <algorithm> #include <iterator> // демонстрация исправления ошибки васи void fix_vasya_iterator_error() { std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8}; std::cout << "ishodnyj massiv dlya vasya: "; for (int x : v) std::cout << x << " "; std::cout << std::endl; // ошибка васи заключалась в том, что вызов v.erase(it) делает текущий // итератор невалидным, и последующий шаг ++it приводил к неопределенному поведению. // правильное решение: присваивать итератору возвращаемое значение метода erase. for (auto it = v.begin(); it != v.end(); ) { if (*it % 2 == 0) { // метод erase удаляет элемент и возвращает валидный итератор на следующий it = v.erase(it); } else { // инкрементируем только если элемент не удалялся ++it; } } std::cout << "rezultat raboty ispravlennogo koda vasya (bez chetnyh): "; for (int x : v) std::cout << x << " "; std::cout << std::endl; } // демонстрация исправления ошибки андрея void fix_andrey_inserter_error() { std::vector<int> source = {10, 20, 30, 40}; std::vector<int> destination; // изначально пустой вектор без выделенной памяти // ошибка андрея заключалась в том, что std::copy пытался писать поверх элементов // через обычный destination.begin(), вызывая ошибку сегментации (out of bounds). // правильное решение: использовать специальный итератор вставки std::back_inserter, // который автоматически вызывает метод push_back для каждого нового элемента. std::copy(source.begin(), source.end(), std::back_inserter(destination)); std::cout << "rezultat raboty ispravlennogo koda andreya: "; for (int x : destination) std::cout << x << " "; std::cout << std::endl; }