gpt4 book ai didi

c++ - 返回的迭代器有错误的值

转载 作者:行者123 更新时间:2023-11-30 04:54:39 25 4
gpt4 key购买 nike

我只是想围绕一些我经常使用的标准算法函数创建包装函数,比如 findfind_if 等等。

但出于某种原因,当我使用我的包装函数时,返回的迭代器具有错误的值。

此代码失败:

template<typename Container, typename ElementType>
typename Container::const_iterator
find(Container c, const ElementType& e)
{
return std::find(std::begin(c), std::end(c), e);
}

template <typename T, typename Container>
bool
within_container(const T& element, const Container& v)
{
return find(v, element) != v.end();
}

int
main()
{
std::vector<int> v = {1, 2, 3, 4, 5};
int key = 10;
bool res = within_container(key, v);
assert(res == false);
}

虽然这段代码运行良好:

template <typename T, typename Container>
bool
within_container(const T& element, const Container& v)
{
return std::find(std::begin(v), std::end(v), element) != v.end();
}

int
main()
{
std::vector<int> v = {1, 2, 3, 4, 5};
int key = 10;
bool res = within_container(key, v);
assert(res == false);
}

我错过了什么?

我在 ubuntu 18.04 上用 g++7.3 编译。

最佳答案

find 函数模板按值获取 c 并将迭代器返回到一个对象,该对象在函数返回时被销毁,从而导致调用者出现未定义的行为。

可以通过使用Container&& c(转发引用)作为参数来修复。

关于c++ - 返回的迭代器有错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53470790/

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