Каков тип возвращаемого алгоритма STL "count" на 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 ответ
Решение
Правильный тип для 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
в явном виде.