Для начала, вот гораздо более чистая версия кода, который вы только что написали:
ifstream input("input.txt");
string s;
while (input >> s) {
cout << s << endl;
vector<string> elems;
elems.push_back(s);
}
Здесь используется ifstream
вместо fstream
, что здесь уместно, поскольку вы не используете средства записи fstream
. Он также сочетает в себе логику чтения с условием цикла, упрощая логику для продолжения.
Одна вещь, которая кажется странной в этом коде, это то, что вы выбрали vector
так, чтобы он работал только для одной итерации цикла. Следовательно, при каждой итерации вы теряете все старое содержимое vector
. Удаление этого из цикла, вероятно, исправит это:
ifstream input("input.txt");
vector<string> elems;
string s;
while (input >> s) {
cout << s << endl;
elems.push_back(s);
}
Наконец, если вы хотите зациклить элементы vector
, складывая их вместе, вы, вероятно, не хотите читать файл как строки, а скорее как int
s или double
s. Это избавит вас от необходимости конвертировать значения позже. Например:
ifstream input("input.txt");
vector<double> elems;
double s;
while (input >> s) {
cout << s << endl;
elems.push_back(s);
}
Теперь вы можете сложить все значения следующим образом:
double total = 0.0;
for (int i = 0; i < elems.size(); ++i)
total += elems[i];
Или, что еще лучше, вы можете сложить все вместе, используя алгоритм accumulate
из <numeric>
:
double total = accumulate(elems.begin(), elems.end(), 0.0);
Надеюсь, это поможет!