C++ вектор накапливается

Я пытался использовать функцию накопления для векторов

vector <double> A;
double B = 0;

A.reserve(100);
for(itr = 0; itr < 210; itr++)
{
    term1 = pow(r[itr], 12);
    term1 = 1/term1;
    term2 = pow(r[itr], 6);
    term2 = 2/term2;
    A.push_back(term1 - term2);
}
B = accumulate(A.begin(), A.end(), 0);

тем не менее, я всегда получал B = 0, в то время как A имел ненулевые значения

2 ответа

Решение

std::accumulate немного подлый в том смысле, что тип результата - это тип начального значения, а не тип элементов контейнера! Итак, ваш аккумулятор производит ints.

Чтобы исправить это, накопить в double:

accumulate(A.begin(), A.end(), 0.0);
//                             ^^^^^^^ literal of type double

Ключ может быть в том, как вы делаете [...] // Заполняете значения в A ` vector A double B = 0;

A.reserve(100);
A.push_back(1);
A.push_back(2);
B = accumulate(A.begin(), A.end(), 0);
return 0;

разрешает B = 3,0

если после резерва вы делаете [0] = 1, это плохой код. то, что вы можете сделать вместо этого, скажем, изменить размер.

резерв только дает вам объем резервной памяти, на самом деле он не создает допустимых итераторов.. поэтому A.begin() по-прежнему равен A.end()

Глядя на изменение кода, знаете ли вы разницу между целым числом и двойной математикой? члены 1 и 2 неотъемлемы?

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