gpt4 book ai didi

c++ - 如何修复条件复制期间发生的崩溃

转载 作者:行者123 更新时间:2023-11-28 04:16:20 25 4
gpt4 key购买 nike

我尝试使用 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 的大小(怎么可能,因为它只有一个迭代器可以使用)?通常的答案是使用一种称为 std::front_insert_iterator 的特殊迭代器,它会在复制元素时调用 push_front 来增长 deque .您可以使用函数 std::front_inserter 创建一个 std::front_insert_iterator。像这样

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 时,您似乎想要反转字符的顺序。

关于c++ - 如何修复条件复制期间发生的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56521952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com