Вероятная проблема в том, что ваш deque
недостаточно велик для размещения копируемых символов.std::copy_if
не изменяет размер deque
(как это может быть, поскольку у него есть только итератор для работы)?Обычный ответ - использовать специальный тип итератора, называемый std::front_insert_iterator
, который будет вызывать push_front
для увеличения deque
при копировании элементов.Вы можете создать std::front_insert_iterator
с помощью функции std::front_inserter
.Подобно этому
auto itr =
std::copy_if(s.cbegin(), s.cend(),
std::front_inserter(dr),
[](char c){return isalpha(c);});
PS, также существуют соответствующие std::back_insert_iterator
и функция std::back_inserter
, которые используются чаще.Но std::front_inserter
подходит для вашего случая, поскольку кажется, что вы хотите изменить последовательность символов, когда вставляете их в deque
.