пятница, 2 апреля 2010 г.

stl accumulate

Наткнулся на заметку Be Careful with stl::accumulate про использование функции из stl accumulatе.
Смысл заметки в том, что при накоплении суммы элементов float или double необходимо строго указывать тип начального элемента.
vector somevec;
float total sum = accumualte(somevec.begin(), somevec.end(), 0.0)
или
float total sum = accumualte(somevec.begin(), somevec.end(), (float)0);

Недавно столкнулся с похожей ситуацией. Необходимо складывать числа типа short в значение int или __int64. Обходится аналогичным строгим указанием типа, только не как параметра функции, а как параметра шаблона этой функции
Например

short s[20];
int64_t totalsum = accumulate < short*,int64_t>(&(s[0]), &(s[20]), 0);
LangDetectru>de GoogleC
Schwimmer