c++ - 如何修复条件复制期间发生的崩溃
问题描述
我正在尝试使用 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 停止工作
解决方案
可能的问题是您deque
的大小不足以容纳您正在复制的字符。std::copy_if
不调整大小deque
(怎么可能,因为它只有一个迭代器可以使用)?通常的答案是使用一种称为 a 的特殊迭代器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
.
推荐阅读
- python-3.x - 如何在此 DataFrame 上应用函数以将日期更改为所需格式并避免“0”和“-”
- sql-server - 使用带有 ef 核心的迁移将新列和约束添加到表中
- java - 如何在工作台中正确使用@InverseRelationShadowVariable
- python - 使用表示数字的代码制作复杂的算法,并将它们加起来用于表示不同个体的数字
- java - Java如何将数组中的变量分配给另一个数组
- java - 编写一个 Dog 构造函数,它有一个参数,名称,并调用超级构造函数,将名称和动物类型“狗”传递给它。过不了类型
- shell - 是否可以使用 Ansible 中的 shell 模块为 rc 文件提供运行时输入
- rust - 我如何知道 Rodio 源或接收器何时完成?
- go - 删除多维数组中的一个值
- python - 将json数据插入sql,所有字典中的键都不相同,并且某些键不存在