返回迭代器的模板函数
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() 方法获取容器的大小(您应该可以这样做,因为您可以访问迭代器),您可以创建一个循环计数的辅助函数.不过,您的情况不需要这样做,因为您使用的是矢量。
我想制作一个可重复使用的函数,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() 方法获取容器的大小(您应该可以这样做,因为您可以访问迭代器),您可以创建一个循环计数的辅助函数.不过,您的情况不需要这样做,因为您使用的是矢量。