Почему не работает push_back()?

121
07 сентября 2019, 10:10

Можете пояснить почему не работает push_back()?

На входе есть лист с числами, и мы должны создать динамический вектор от кол-ва простых чисел в листе, а потом записать их в вектор.

Выводит 0 0 0 0, а должен 2 3 5 7. В чем проблема?

#include <iostream>
#include <vector>
#include <list>
#include <cmath>

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<int> 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<int> vec, list<int> lst) {
    for (int n : lst) {
        if (prostoNumer(n) == true) {
            vec.push_back(n);
        }
    }
}
void print(vector<int> vec) {
    for (int i = 0; i < vec.size(); i++) {
        cout << vec.back() << endl;
        vec.pop_back();
    }
}
int main() {
    list<int> lst = {1, 2, 3, 77, 54, 7, 14, 5, 96};
    vector<int> vect;
    vect.reserve((shetchik(lst)));
    add(vect, lst);
    print(vect);
    system("pause>nul");
    return 0;
}
Answer 1

Ваш push_back прекрасно работает. Но вы передаете контейнеры в функции по значению. Все ваши изменения применяются к локальной копии контейнера и теряются вместе с этой копией по завершении функции.

Прекратите передавать тяжелые объекты по значению без явной на то необходимости.

Каким образом вам удалось получить вывод 0 0 0 0 - не ясно. Ваш контейнер имеет размер 0 и ничего подобного функция print выводить не будет

READ ALSO
Многопоточный калькулятор на Qt [закрыт]

Многопоточный калькулятор на Qt [закрыт]

Задача сделать так, чтобы программа работала в двух потокахНужно искусственно усыплять поток, дабы эмулировать долгие вычисления

138
Запись и чтение из COM порта Linux

Запись и чтение из COM порта Linux

Хочу записать в com-порт и прочитать из него некоторое количество байтС записью проблем вроде бы нет, write ошибок не возвращает

127
Проблема с выводом [закрыт]

Проблема с выводом [закрыт]

Только недавно начал изучать Java и решил сделать простенькую игру по угадыванию буквы, но столкнулся с небольшой проблемой, подскажите, в чём...

123
RequestMapping не работает, хотя GetMapping или PostMapping работают

RequestMapping не работает, хотя GetMapping или PostMapping работают

У меня есть Spring MVC приложение, когда я заменяю @GetMapping("/addPhoto") на RequestMapping(name = "/addPhoto",method = RequestMethodGET) у мене просто не стратует программа

130