什么是STL算法的返回类型" count",在valarray上

时间:2015-11-08 11:39:25

标签: c++ iterator valarray

我在Visual Studio 2010 Pro计算机上使用Windows 7 64bit,我想在count上使用<algorithm>(来自valarray标题):

int main()
{

  valarray<bool> v(false,10);
  for (int i(0);i<10;i+=3)
         v[i]=true;

  cout << count(&v[0],&v[10],true) << endl;

  // how to define the return type of count properly?
  // some_type Num=count(&v[0],&v[10],true); 
}

上述程序的输出是正确的:

4

但是我想将值赋给变量并使用int结果编译器警告有关精度损失的信息。由于valarray没有迭代器,我无法弄清楚如何使用iterartor::difference_type

这有可能吗?

1 个答案:

答案 0 :(得分:3)

Num的正确类型是:

typename iterator_traits<bool*>::difference_type
    Num=count(&v[0],&v[10],true);

原因是count总是返回:

typename iterator_traits<InputIt>::difference_type

你的InputIt是指向bool的指针:

&v[0];   // is of type bool*
&v[10];  // is of type bool*

对我而言,iterator_traits<bool*>::difference_type评估为long,因此您可能只是使用以下内容:

long Num=count(&v[0],&v[10],true);

但是我不得不承认我没有明确地在Visual Studio 2010 Pro下测试它。