Funzioni void e vettori

penso sia una cosa abbastanza semplice ma non riesco a capire bene come funzionano i void, nel senso che li devo usare per forza per risolvere alcuni problemi perché me lo impone il testo e ogni volta mi servono solo per modificare dei vettori ma poi non so come averli con le modifiche nel main o in altre funzioni, perché col return non funziona. un esempio di codice dove ho questo problema è questo:

#include <iostream>
#include <cassert>
#include <utility>
#include <vector>

using namespace std;

int valAss(int n){
    if(n<0){
        n=n*(1);
    }
    return n;
}

void apri(long long p, vector<int> V) {
    V.push_back(p);
}

void chiudi(long long p, vector<int> V) {
    int c;
    for(int i=0; i<sizeof(V); i++){
        if(p==V[i]){
            c=i;
        }
    }
    for(int i=c; i<sizeof(V); i++){
        V[i]=V[i+1];
    }
}

long long chiedi(long long p, vector<int> V) {
    int r=-1;
    if(sizeof(V)>0){
        r=V[0];
        for(int i=0; i<sizeof(V); i++){
            if(valAss(V[i]-p)<valAss(r-p) and V[i]>r){
                r=V[i];
            }
        }
    }
    return r;
}

void inizia(char t, long long p, int Q, vector<int> V) {
    if(t=='a'){
        apri(p,V);
    }else if(t=='c'){
        chiudi(p,V);
    }else{
        cout << chiedi(p,V);
    }
    
    return;
}

void inizia(char t, long long p, int Q, vector<int> V);
void apri(long long p, vector<int> V);
void chiudi(long long p, vector<int> V);
long long chiedi(long long p, vector<int> V);


int main() {
    int Q;
    cin >> Q;
    vector<int> V;

    for (int i = 0; i < Q; i++){
        long long p;
        char t;
        cin >> t >> p;
        inizia(t,p,Q,V);
    }

    return 0;
}

non so se effettivamente il problema sia nel fatto che li modifico in un void o se a prescindere non posso “returnare” dei vettori

Ciao, non puoi modificare i parametri delle funzioni definite dal grader, poiché il grader che le chiama non è da te modificabile. Probabilmente la soluzione che stai cercando è l’utilizzo di variabili globali.

Comunque mi sembra che tu abbia davvero tanti dubbi sul funzionamento di base di C++.
Sebbene non sia richiesta una conoscenza minuziosa del linguaggio per la programmazione competitiva, senza una conoscenza solida di almeno le strutture di base è difficile capire come trasformare le proprie idee in codice. Ti consiglio quindi di imparare un po’ più di C++ e di riprendere in un secondo momento (anche non tra molto) i problemi di algobadge.

1 Mi Piace