Когда вы не инициализируете переменные, они начинаются со значения «мусора», которое находится в их адресе памяти.Поэтому, когда вы перебираете вектор и увеличиваете его каждый раз по каждому значению, вы фактически начинаете считать со случайного числа, с которого начинаете, вместо 0. Вот как это должно быть (не проверено):
#include <iostream>
#include <vector>
using namespace std;
int main()
{
float n = 0, temp = 0, sum = 0; // initialized variables as 0.
vector<float> nums;
cin >> n;
for(int i=0; i<n; i++){
cin >> temp;
nums.push_back(temp);
}
nums.resize(n); // to be honest I don't really understand why this is needed
// note: you can use the letter i again, when you declare a variable inside a scope,
// it's only declared for that scope.
for(int j=0; j<(short)nums.size(); j++){
sum+=nums.at(j);
}
cout << sum;
return 0;
}