[英]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.