Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

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

#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 выводить не будет

Комментариев нет:

Отправить комментарий