Для начала, вы должны научиться форматировать ваш код.
Во-вторых, в C ++ массив обычно объявляется примерно так:
std::vector<float> anArray;
Объявление с использованием []
является остатком от C и используется только в очень особых случаях (после того, как вы полностью освоили std::vector
).И вектор будет расширяться автоматически, если вы используете push_back
для вставки значений.И std::vector
несет с собой свой размер, так что вы можете выполнять итерацию, используя:
for ( int i = 0; i != v.size(); ++ i ) {
// use `v[i]` here...
}
Вы также можете выполнять итерацию, используя итераторы, что в целом более идиоматично (но, возможно, не в том случае, когда вывыполнение числовой работы).
Наконец, std::istream::eof()
действительно полезен только после сбоя ввода (чтобы узнать, произошел ли сбой из-за конца файла или чего-то еще).Обычная идиома для чтения будет выглядеть примерно так:
float value;
while ( contdist_file >> value ) {
distanze.push_back( value );
}
(я полагаю, это то, что вы на самом деле хотите в первом цикле. В опубликованном вами коде вы просто читаете во временныйпеременная, перезаписывается каждый раз, но никак иначе не делает ничего с прочитанным значением.)
Наконец, если ваши векторы могут быть очень большими, обычно в C ++ используется double
вместо float
.(Но это зависит от общего объема данных, которые вам нужно обработать, а также от точности, которая вам нужна.) Обратите внимание, что цикл с:
Sp += slot[i];
, вероятно, даст очень плохие результаты, если размерslot
большое, если вам не повезло со значениями в slot
.Если значения находятся в диапазоне 0.5...1
, например, после пары тысяч значений с float
, у вас будет только около 3 или 4 десятичных цифр точности, и если первое значение будет 10000000, любоеследующие значения меньше 1 рассматриваются как ноль.Как правило, вам нужны специальные алгоритмы для суммирования последовательностей с плавающей запятой.(Использование double
улучшит ситуацию, но не устранит проблему.)