我在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
。
这有可能吗?
答案 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
下测试它。