Napisanie uniwersalnej funkcji działającej dla wektora w argumencie

0

Witam, mam takie oto zadanie i wydawałoby się, że wszystko powinno działac jednak jak liczba "2" występuje wiecej niz raz to program dalej liczy ze wystąpiła tylko jeden raz. Gdzie jest błąd?

Napisz uniwersalną funkcję działającą dla wektora w argumencie. Przekaż dodatkową liczbę
w argumencie. Funkcja ma za zadania zwrócić liczbę wystąpień zadanej liczby znalezionych w
wektorze. Analogicznie, jeśli liczba nie wystąpi w wektorze funkcja ma zwrócić zero.

#include <iostream>
#include<vector>
#include<cstdio>
#include<conio.h>

using namespace std;

int find (vector <int> Vec, int r, int a=2) {
    int times=0;
    for (size_t i = 0; i<r;i++) {
        if (Vec[i]=a) {
            times ++;
            return times;
        } else {
        return 0;
        }
    }
}

int main()
{
    int funkcja;
    vector <int> mainVec;
    size_t liczba;

    for (size_t i = 0; i<mainVec.max_size(); i++) {
        cout << "Podaj liczbe. Kliknij 0 aby zakonczyc.";
        cin >> liczba;
        if (liczba==0) {
            cout<< "Koniec numerowania!";
            break;
        }else {
        mainVec.push_back(liczba);
        }
    }
    funkcja = find (mainVec, mainVec.size());
    cout << "Ilosc dwojek: " << funkcja;
    return 0;
}
3
if(Vec[i]=a)

Przypisanie zamiast porównania, użyj ==

            return times;
        } else {
        return 0;

Wychodzisz z funkcji w pierwszej iteracji, zwracaj wartość po pętli.

int find (vector <int> Vec, int r, int a=2) {

Przyjmujesz wektor przez wartość, rób to przez const referencję: Przekazywanie parametru przez wartość i referencję

Przekazywanie wielkości wektora osobno nie ma sensu, wektor wie ile ma elementów.

Ogółem, całą funkcję można skrócić do:

int find (vector <int> const& Vec, int a=2) {
    return std::count(Vec.cbegin(), Vec.cend(), a);
}
0

Okej pomogło, dzięki wielkie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1