如何修复有条件复制期间发生的崩溃

时间:2019-06-10 07:06:50

标签: c++ data-structures stl

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

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停止工作

1 个答案:

答案 0 :(得分:1)

可能的问题是您的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时反转字符的顺序。