我尝试构建一个模板函数,该函数获得begin
或end
的两个迭代器(vector
和array
)(这必须是未知容器传递给功能)。
我希望该函数检查传递给它的容器的大小。
我的问题是:如果begin iterator
等于end iterator
,它是否意味着容器内有0或1个元素?
我怎样才能改变一些通用尺寸类型?
如果我想通过将迭代器传递给sort函数来对未知容器进行排序,这会成为一个问题吗?我有一些感觉它不起作用。
这是我的模板功能草案:
template<class P, class T>
T my_func(P beg, P end)
{
typedef typename ??? container_size;
if (beg == end)//first problem to determine if contains 0 or 1
elements
throw domain_error("some message if 0 elements");
sort(beg, end);// scond problem
}
答案 0 :(得分:8)
- 我希望该函数检查传递给它的容器的大小。我的问题是:如果开始迭代器等于结束迭代器它是否意味着容器内的0或1个元素?我怎样才能改变一些通用尺寸类型?
醇>
您应该使用std::distance
。
- 如果我想通过将迭代器传递给sort函数来对未知容器进行排序,这会成为一个问题吗?我有一些感觉它不起作用。
醇>
只要迭代器为RandomAccessIterators且值类型为swappable
,它就可以工作所以,你的代码可能是:
template<class P, class T>
T my_func(P first, P last)
{
if(first == last) // No elements within the range
throw domain_error("some message if 0 elements");
//Number of Elements within the range
auto container_size = std::distance(first, last);
std::sort(first, last);
return ...;
}
如果我的猜测是正确的,那么模板参数T
应该是迭代器的值类型,你可以使用std::iterator_traits<T>::value_type
获取它