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

时间:2017-07-19 14:44:20

标签: c++ arrays vector

我尝试构建一个模板函数,该函数获得beginend的两个迭代器(vectorarray)(这必须是未知容器传递给功能)。

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

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

  3. 这是我的模板功能草案:

        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
    
        }
    

1 个答案:

答案 0 :(得分:8)

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

您应该使用std::distance

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

只要迭代器为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获取它