繁体   English   中英

返回迭代器的模板函数

[英]Template funtion returning an iterator

我想做一个可重复使用的 function ,它返回一个迭代器,以便轻松找到容器的中点并需要一些帮助

固定的;

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 以获得中间 position。 迭代器没有有效的除法表达式,因此您所做的将不起作用。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM