首页 > 解决方案 > 如何修复条件复制期间发生的崩溃

问题描述

我正在尝试使用 std::copy_if 仅将字符串 's' 的字母字符存储到我的字符队列中,但在复制语句期间出现崩溃。

std::string s{"Love"};
std::deque<char> dr;
std::deque<char>::reverse_iterator itr =std::copy_if(s.cbegin(),s.cend   (),dr.rbegin(),[](char c){return isalpha(c);});

program.exe 停止工作

标签: c++data-structuresstl

解决方案


可能的问题是您deque的大小不足以容纳您正在复制的字符。std::copy_if不调整大小deque(怎么可能,因为它只有一个迭代器可以使用)?通常的答案是使用一种称为 a 的特殊迭代器std::front_insert_iterator,它会在复制元素时调用它push_front来增长。你可以用函数deque创建一个。像这样std::front_insert_iteratorstd::front_inserter

auto itr = 
    std::copy_if(s.cbegin(), s.cend(),
        std::front_inserter(dr), 
        [](char c){return isalpha(c);});

PS还有对应的std::back_insert_iteratorstd::back_inserter比较常用的功能。但是std::front_inserter适合您的情况,因为当您将字符插入deque.


推荐阅读