Каков тип возвращаемого алгоритма 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 в явном виде.

Другие вопросы по тегам