Итератор принимает значение нуля
cout << "Реализация списка: " << endl;
int skdf = rand()%10 +20;
vector<int> spisok(skdf);
vector<int>::iterator it;
it = spisok.begin();
for(advance(it, 0); it != spisok.end(); it++)
{
*it = rand()%100 -50;
}
int spisok_summa = 0;
for(advance(it, 0); it != spisok.end(); it++)
{
spisok_summa += *it;
}
cout << spisok_summa << " - сумма чисел в списке" << endl;
cout << spisok_summa/skdf << " - среднее арифмитическое списка" << endl;
advance(it, 0);
while(*it < 0)
it++;
int min1 = 0;
min1 = *it;
for(it; it != spisok.end(); it++)
{
if(*it > 0 and *it < min1)
min1 = *it;
}
cout << min1 << " - наименьшее положительное число списка" << endl;
for(advance(it, 0); it != spisok.end(); it++)
{
if(*it > 0)
*it = min1*min1;
cout << *it << " - элемент списка" << endl;
}
Нужно заменить каждое положительное число квадратом минимального положительного. Подскажите, почему у меня все по нулям выводится?
Реализация списка:
0 - сумма чисел в списке
0 - среднее арифмитическое списка
0 - наименьшее положительное число списка
Program ended with exit code: 0
Ответы (2 шт):
Дело в том, что
advance(it, 0);
не выставляет итератор на начало. Так что вы пытаетесь работать с итератором, указывающим за конец списка...
Вот тут
cout << spisok_summa/skdf
у вас целочисленное деление, с отбрасыванием дробной части результата... С использованием случайного равномерного заполнения в вашем диапазоне скорее всего получится 0.
Вот так
while(*it < 0)
я бы не рекомендовал поступать — а вдруг в списке будут только отрицательные значения?...
Замените соответствующий фрагмент вот таким:
vector<int>::iterator it;
for(it = spisok.begin(); it != spisok.end(); it++)
{
cout << (*it = rand()%100 -50) << " ";
}
cout << endl;
int spisok_summa = 0;
for(it = spisok.begin(); it != spisok.end(); it++)
{
spisok_summa += *it;
}
cout << spisok_summa << " - сумма чисел в списке" << endl;
cout << double(spisok_summa)/skdf << " - среднее арифмитическое списка" << endl;
it = spisok.begin();
while(*it < 0)
it++;
Чем Вас не устраивает такой вариант:
for (auto elem : spisok) {
spisok_summa += elem;
}
cout << spisok_summa << " - сумма чисел в списке" << endl;
cout << double(spisok_summa)/skdf << " - среднее арифмитическое списка" << endl;