gpt4 book ai didi

c++ - 返回迭代器时发生转换错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:34 25 4
gpt4 key购买 nike

我正在试验“查找”功能。我好像回不去了迭代器。

template<typename T>                                                                                                  
typename T::iterator do_find(const T &v, int f)
{
return find(v.begin(), v.end(), f);
}

这是我的主要内容:

int main()                                                                                                            
{
std::vector<int> v = {1, 2, 3, 3, 4, 6};
std::vector<int>::iterator it;
it = do_find(v, 3);
return 0;
}

编译时出现以下错误:

error: impossible de convertir
« std::find<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, int>((& v)->std::vector<int>::begin(), (& v)->std::vector<int>::end(), f) » de « __gnu_cxx::__normal_iterator<const int*, std::vector<int> > » vers « std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >} »

最佳答案

v 声明为 const,然后对于 std::vector,两者都是 v.begin()v.end() return std::vector::const_iterator,则find的返回类型也是std::vector::const_iterator;它不能隐式转换为 std::vector::iterator

您可以更改返回类型,例如

template<typename T>                                                                                                  
typename T::const_iterator do_find(const T &v, int f)
{
return find(v.begin(), v.end(), f);
}

或者只是

template<typename T>                                                                                                  
auto do_find(const T &v, int f)
{
return find(v.begin(), v.end(), f);
}

然后

auto it = do_find(v, 3); 

如果你想通过返回的迭代器修改元素,那么你应该将参数v声明为非常量。

template<typename T>                                                                                                  
auto do_find(T &v, int f)
{
return find(v.begin(), v.end(), f);
}

请注意,对于 auto,如果您传递一个非常量 vector,上面的 do_find 将返回 iterator , 如果你传递一个 const vector,则返回 const_iterator

关于c++ - 返回迭代器时发生转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339271/

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