我正在尝试使用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停止工作
答案 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
时反转字符的顺序。