返回迭代器的模板函数

时间:2021-05-13 02:01:52

标签: c++ templates iterator

我想做一个可重用的函数,它返回一个迭代器,以便于找到容器的中点并需要一些帮助

已修复;

template <typename T> std::vector<int>::const_iterator middlepoint(std::vector<T> const& arr){
    auto temp = arr.begin() + arr.size() /  2;
    return temp;
}

来电者:

auto middle_point = middlepoint(arr.begin(), arr.end());

固定:

template <typename T>  int middlepoint(std::vector<T> const& arr){
    std::cout << "size: " << arr.size() << endl;
    auto middle_point = arr.begin() + (arr.size()/  2);
    int middle_element = middle_point - arr.begin();
    return middle_element;
}

来电者:

int middle_element = middlepoint(arr);

错误:

ambiguous

模棱两可,意味着您声明了 2 个具有相同名称但参数不同的函数。

1 个答案:

答案 0 :(得分:0)

看起来您正在使用开始和结束迭代器并将它们除以 2 以获得中间位置。迭代器没有有效的除法表达式,因此您所做的将不起作用。

我认为实现这一点的最佳方法是使用容器的大小除以 2 作为从开始或结束(以最适合您的方式)的偏移量。这样你就不需要将两个迭代器都传递给函数。

auto mid = it.begin() + (arr.size() / 2);  original
return mid; 

如果您无法使用 .size() 方法获取容器的大小(您应该能够获取,因为您可以访问迭代器),您可以创建一个循环和计数的辅助函数。不过,您的情况不需要这样做,因为您使用的是矢量。

相关问题