sstream
пуст, когда вы используете его во втором while
: while (sstream >> i)
. Это потому, что вы инициализировали его пустым std::string line;
. Вы можете переместить его внутрь первого, пока l oop:
while (getline(std::cin, line)){
std::stringstream sstream(line);
Это исправит ваш код.
Некоторые предложения по улучшению вашего кода:
Кроме того, всегда инициализируйте свои переменные, поэтому int i
должно быть int i = 0;
или int i{};
.
Кажется, вы просто читаете из стандартного ввода в line
, а затем конвертируете его в int
. Вы можете использовать std::stoi()
вместо stringstream
, что может быть достаточно в этом случае.
sumvec
содержит необработанный l oop для добавления всех элементов vector
. Вместо этого вы можете использовать std::accumulate
. Пример:
int total = std::accumulate(v.begin(), v.end(), 0);
cout << total << endl;
Если вы все еще хотите использовать sumvec
, убедитесь, что вы передаете вектор по ссылке. Это позволит избежать копирования, что приведет к повышению производительности, и у вас будет гарантия, что v
не изменится в этой функции. Это также дает читателю понять, что делает эта функция.
void sumvec(const vector<int>& v) {
Кроме того, в вашем l oop
for (int i = 0; i < v.size(); i++)
Вы сравниваете size_t
с int
. size_t
соответствует unsigned
, а int
- нет. По возможности избегайте этого. Вместо этого используйте size_t
:
for (size_t i = 0; i < v.size(); i++)