未知容器,矢量或数组c ++的大小

axc*_*tor 2 c++ arrays vector

我尝试构建一个模板函数,它获取a 或a的两个迭代器(beginend)(这必须是传递给函数的未知容器).vectorarray

  1. 我希望该函数将检查传递给它的容器的大小.我的问题是:如果begin iteratorequals end iterator是否意味着容器内有0或1个元素?我怎样才能改变一些通用尺寸类型?

  2. 如果我想通过将迭代器传递给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

    }
Run Code Online (Sandbox Code Playgroud)

Whi*_*TiM 8

  1. 我希望该函数将检查传递给它的容器的大小.我的问题是:如果开始迭代器等于结束迭代器它是否意味着容器内的0或1个元素?我怎样才能改变一些通用尺寸类型?

你应该用std::distance它.

  1. 如果我想通过将迭代器传递给sort函数来对未知容器进行排序,这会成为一个问题吗?我有一些感觉它不会起作用.

如果迭代器是RandomAccessIterators并且值类型是可交换的,它将工作


所以,你的代码可能是:

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 ...;
}
Run Code Online (Sandbox Code Playgroud)

如果我的猜测是正确的,那么模板参数T应该是迭代器的值类型,您可以使用它来获取它std::iterator_traits<T>::value_type