Как удалить подстроку из строки методом erase? c++ [закрыт]
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.
Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.
Закрыт 2 года назад .
Для заполнения стека нужно ввести «push какое-то число«». Я записываю это в строку, затем пытаюсь удалить из нее подстроку начиная с 0-ого символа по 4-ый символ, чтобы строка содержала только число, которое я позже преобразую к int и благополучно запихаю в стек. Что я делаю не так? Пробовал также str = str.erase (0,3)
#include #include int main() < using namespace std; string str = ""; cin >> str; str.erase(0, 4); cout
vector::erase в C++ (с примерами)
Здравствуйте! Сегодня мы обсудим часто используемую функцию в C++ для управления элементами в векторе - erase . Начнем с изучения этой функции, узнаем, как правильно ее использовать, и рассмотрим практические примеры. К концу статьи у вас будет твердое понимание этого важного инструмента.
Удаление элементов из вектора в C++
Векторы в C++ — это динамические массивы, которые могут увеличиваться и уменьшаться в размере. Иногда нам нужно удалить элементы из вектора, будь то один элемент или диапазон. Здесь на помощь приходит функция erase .
Функция erase выглядит так:
vector::erase(iterator position); vector::erase(iterator first, iterator last);
- Функция принимает итераторы первого и последнего удаляемых элементов.
- Она возвращает итератор, указывающий на следующий элемент после удаленного (или удаленных). Если был удален последний элемент, итератор указывает на конец вектора.
Рассмотрим ее на примере простой программы:
#include #include int main() std::vectorint> my_vector; // Добавляем значения от 1 до 10 for (int i=1; i10; i++) my_vector.push_back(i); // Удаляем 6-й элемент my_vector.erase(my_vector.begin()+5); // Удаляем первые 3 элемента my_vector.erase(my_vector.begin(),my_vector.begin()+3); std::cout <"my_vector содержит:"; for (unsigned i=0; imy_vector.size(); ++i) std::cout <' ' [ i]; std::cout <'\n'; return 0; >
Выходные данные программы:
my_vector содержит: 4 5 7 8 9 10
Когда вы удаляете элемент (или несколько элементов) из вектора:
- Размер вектора уменьшается на количество удаленных элементов.
- Если вы не удаляете элементы с конца, вектор сдвигает все элементы после удаленных на новые позиции. Это не так быстро, как в некоторых других контейнерах, таких как list или forward_list .
Время выполнения зависит от двух вещей: количества удаляемых элементов и количества элементов после удаляемых. Последние перемещаются на новые позиции.
Будьте осторожны с вашими итераторами! Если они указывают на удаленный элемент или на любой элемент после него, они будут работать не так, как вы ожидаете. Но итераторы до удаленных элементов остаются действительными.
Безопасность и исключения
Используя erase , вы изменяете вектор. Но элементы до удаленных не затрагиваются. Так что безопасно обращаться или изменять их при использовании erase . Если вы ошибочно передаете неправильную позицию или диапазон в erase , результат может быть непредсказуемым, будьте внимательны.
Так же, как функц