gpt4 book ai didi

带有迭代器的 C++ 模板函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:08 25 4
gpt4 key购买 nike

我应该实现一个遍历迭代器范围的模板函数,检查参数谓词的条件是否满足值,并且使用参数插入迭代器将不满足谓词条件的值复制到参数输出。

我已经编写了一个主程序来测试我的模板函数实现,它没有返回任何错误,但是我大学的测试程序不会使用我的模板函数实现进行编译,并给出以下错误:

/usr/include/c++/4.4/debug/safe_iterator.h:272: error: no match for 'operator+=' in '((__gnu_debug::_Safe_iterator<std::__norm::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__debug::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*)this)->__gnu_debug::_Safe_iterator<std::__norm::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__debug::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_current += __n'¶

我的实现是:

template <typename IteratorIn, typename IteratorOut, typename Predicate>
IteratorOut copyIfNot(IteratorIn begin, IteratorIn end, IteratorOut out, Predicate pred) {
for (IteratorIn iter = begin; iter != end; iter++) {
if (!pred(*iter)) {
std::copy(iter, iter + 1, out);
}
}

return out;
}

你能提示我错误可能出在哪里吗?

最佳答案

显然,您正在使用带有 list::iterator 的函数,它不是随机访问迭代器,也没有像您在 iter 中使用的那样实现 operator+ + 1

您必须复制一份并在其上使用operator++:

auto itercopy = iter;
std::copy(iter, ++itercopy, out);

关于带有迭代器的 C++ 模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887492/

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