返回迭代器的模板函数

Template funtion returning an iterator

我想制作一个可重复使用的函数,returns 一个迭代器,以便轻松找到容器的中间点并需要一些帮助

已修复;

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 个具有相同名称但不同参数的函数。

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

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

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

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