gpt4 book ai didi

c++ - 我是否使用了 copy_if 错误?

转载 作者:IT老高 更新时间:2023-10-28 12:49:16 26 4
gpt4 key购买 nike

我正在使用 Visual Studio 2010,我正在尝试使用 std::copy_if,我想复制所有满足谓词的值。例如:

struct comp
{
bool operator()(const int i) { return i == 5 || i == 7; }
};

int main()
{
array<int, 10> arr = { 3, 2, 5, 7, 3, 5, 6, 7 };
vector<int> res;
copy_if(arr.begin(), arr.end(), res.begin(), comp());

for(int i = 0; i < res.size(); i++)
{
cout << res[i] << endl;
}

return 0;
}

但是当我运行这段代码时,我得到:vector iterator not incrementable。

最佳答案

copy_if 算法看起来像这样(取自 MSVC2010):

template<class InIt, class OutIt, class Pr> inline
OutIt copy_if(InIt First, InIt Last, OutIt Dest, Pr Pred)
{
for (; First != _Last; ++First)
if (Pred(*_First))
*Dest++ = *First;
return (Dest);
}

正如你所见,copy_if 并没有执行 push_back,它只是将值复制到迭代器所在的位置,然后递增迭代器。你想要使用的是 std::back_inserter,它将元素推回你的 vector 。如果您使用的是 MSVC2010,您可以使用 Lambda 而不是 Microsoft 作为扩展提供的函数对象(C++0x)

int main()
{
array<int, 10> arr = { 3, 2, 5, 7, 3, 5, 6, 7 };
vector<int> res;
copy_if(arr.begin(), arr.end(), back_inserter(res),[](const int i) { return i == 5 || i == 7; });

for(unsigned i = 0; i < res.size(); i++)
cout << res[i] << endl;

return 0;
}

关于c++ - 我是否使用了 copy_if 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432739/

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