Invalid function signature

0

Cześć,

dostałem zadanie na studiach napisania programu, który porównuje dwa wektory uporządkowane rosnąco, a następnie wypisuje ich część wspólną uporządkowaną rosnąco.
Program, który napisałem kompiluje się i zwraca prawidłowy wynik jednak automatyczna sprawdzarka z której korzysta prowadzący wyrzuca błąd invalid function signature.
Nie mam pojęcia o co z tym chodzi dlatego proszę o radę co jest nie tak.

#include<vector>
#include<iostream>

std::vector<int> intersection(const std::vector<int> vector1, const std::vector<int> vector2)
{
    std::vector<int> result;
    for (unsigned int i = 0; i < vector1.size(); ++i)
    {
        for (unsigned int j = 0; j < vector2.size(); ++j)
        {
            if (vector1[i] == vector2[j])
            {
                result.push_back(vector1[i]);
                break;
            }
        }
    }
    return result;
}

int main()
{
    const std::vector<int> vector1 {-7, 2, 3, 7, 15, 18, 23},
                           vector2 {-8, 3, 5, 8, 15, 23, 30};

    std::vector<int> result = intersection(vector1, vector2);

    for (int element: result)
    {
        std::cout << element << " ";
    }
    std::cout << std::endl;
}
0

Z jakiej wersji standardu C++ korzysta sprawdzarka?
Najwyraźniej z czegoś starszego niż, C++11 bo wtedy można odtworzyć ten błąd.

Poza tym, dane wejściowe wpisane twardo w kod, wyglądają dość podejrzanie, jak na coś co ma sprawdzić automatyczny sędzia.

I jeszcze na koniec, twój kod ma złożoność O(n^2) a powinien mieć O(n) i raczej nie wygląda na coś co zwraca prawidłowy wynik.

0

@MarekR22: Automatyczna sprawdzarka działa na Linuksie i używa kompilatora GNU z opcjami -std=c++11 -Wvla -Werror. Co do danych wejściowych to mogą być inne. Ja do sprawdzarki wrzucam tylko funkcje, a sprawdzarka wrzuca funkcję main oraz wszystkie dyrektywy określone w zadaniu.

0
Bartosz Gruszkowski napisał(a):

Ja do sprawdzarki wrzucam tylko funkcje, a sprawdzarka wrzuca funkcję main oraz wszystkie dyrektywy określone w zadaniu.

  1. podaj dokładną treść zadania, żeby było jasne jakie warunki masz spełnić (coś mi się wydaje,m że zmieniłeś coś według swojego widzimisię i dlatego zgłaszany jest błąd)
  2. podaj kod który wrzucasz do sprawdzarki
  3. dobrze by było zadawać pytania, tak, żebyśmy się nie musieli: domyślać/dopytywać o istotne szczegóły
0

@MarekR22: Przepraszam, wydawało mi się, że opisałem wszystko co najważniejsze. Poniżej treść zadania i kod, który wrzucam.

Napisz funkcje intersection, któa przyjmuje stałe referencje dwóch uporzadkowanych rosnaco wektorów liczb całkowitych i zwraca uporzadkowany rosnaco wektor liczb zawartych w obu tych wektorach
jednoczesnie. Funkcja powinna byc przystosowana do uzycia w przykładowym programie ponizej. Funkcja korzysta tylko z pliku nagłówkowego vector.
Przykładowy program:

int main() {
const std::vector<int> vector1 {-7, 2, 3, 7, 15, 18, 23},
vector2 {-8, 3, 5, 8, 15, 23, 30};
std::vector<int> result = intersection(vector1, vector2);
for (int element: result) {
std::cout << element << " "; }
std::cout << std::endl; }

Wykonanie
Out: 3 15 23

Mój kod:

std::vector<int> intersection(const std::vector<int> vector1, const std::vector<int> vector2)
{
    std::vector<int> result;
    for (unsigned int i = 0; i < vector1.size(); ++i)
    {
        for (unsigned int j = 0; j < vector2.size(); ++j)
        {
            if (vector1[i] == vector2[j])
            {
                result.push_back(vector1[i]);
                break;
            }
        }
    }
    return result;
}
5

Napisz funkcje intersection, któa przyjmuje stałe referencje dwóch uporzadkowanych rosnaco wektorów liczb całkowitych i zwraca uporzadkowany rosnaco wektor liczb zawartych w obu tych wektorach

  • ✓ napisz funkcję intersection
  • ✗ która przyjmuje stałe referencje
  • ✓ zwraca uporządkowany rosnąco wektor
0
std::vector<int> intersection(const std::vector<int> &va, const std::vector<int> &vb)
{
    std::vector<int> result;
    for(size_t a=0,b=0;(a<va.size())&&(b<vb.size());++a,++b)
    {
            if(va[a]<vb[b]) --b;
            else if(va[a]>vb[b]) --a;
            else result.push_back(va[a]);
    }
    return result;
}

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