#cpp #list #vector
Можете пояснить почему не работает push_back()? На входе есть лист с числами, и мы должны создать динамический вектор от кол-ва простых чисел в листе, а потом записать их в вектор. Выводит 0 0 0 0, а должен 2 3 5 7. В чем проблема? #include#include #include #include
using namespace std; bool prostoNumer(int n) { if (n == 1) return false; for (int i = 2; i <= sqrt(n); i++) if (n % i == 0)return false; return true; } int shetchik(list lst) { try { int count = 0; for (int n : lst) { if (prostoNumer(n) == true) { count++; } } if (count > 0) return count; else throw 123; } catch (int i) { if (i == 123) cout << "No" << endl; } } void add(vector vec, list lst) { for (int n : lst) { if (prostoNumer(n) == true) { vec.push_back(n); } } } void print(vector vec) { for (int i = 0; i < vec.size(); i++) { cout << vec.back() << endl; vec.pop_back(); } } int main() { list lst = {1, 2, 3, 77, 54, 7, 14, 5, 96}; vector vect; vect.reserve((shetchik(lst))); add(vect, lst); print(vect); system("pause>nul"); return 0; }
Ответы
Ответ 1
Ваш push_back прекрасно работает. Но вы передаете контейнеры в функции по значению. Все ваши изменения применяются к локальной копии контейнера и теряются вместе с этой копией по завершении функции. Прекратите передавать тяжелые объекты по значению без явной на то необходимости. Каким образом вам удалось получить вывод 0 0 0 0 - не ясно. Ваш контейнер имеет размер 0 и ничего подобного функция print выводить не будет
Комментариев нет:
Отправить комментарий