Spiego un pò il codice cosi da non farti perdere tempo nella sua comprensione:
1. Il tipo list in python è dinamico, ossia non ha una dimensione fissa, la cosa più simile in c++ è la classe vector
2. La libreria random di Python è molto più ad alto livello, in C++ si utilizza rand()%max per indicare un numero da 0 a max - 1, poi per accedere all'elemento si applica l'operatore [] (accesso indicizzato)
3. Il remove di un elemento è abbastanza facile in Python, in C++ bisogna gestirlo tramite iterati e shift per mantenere la struttura consistente e realizzare lo stesso effetto di del .remove di Python, ho scritto una funzione ad-hoc per la rimozione di un elemento da un vettore generico e per una posizione prefissata.
4. La funzione .choice di random in Python definisce le dimensioni correnti, in C++ ti devi mantenere tale valore e aggiornarlo ad ogni eliminazione, ecco perché ho aggiornato la variabile studenti andando a decrementarla ad ogni rimozione.
Giusto per informazione, il tuo codice non fa distinzioni tra 0 e altri simboli differenti da * per la terminazione. Inoltre, quando si scrivono tanti * quanti sono gli elementi del vettore, si ha una floating point exception (quindi nel caso basta fare un controllo che se la dimensione degli elementi correnti è 0, il ciclo termina a prescindere dalla chiave inserita).
C++:
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void remove(typename std::vector<T>& vec, size_t pos)
{
typename std::vector<T>::iterator it = vec.begin();
advance(it, pos);
vec.erase(it);
}
int main(void){
int studenti;
cout << "Inserire numero studenti: ";
cin >> studenti;
cout << "Numero studenti: " << studenti << "\n";
vector<int> lista;
for(int i = 0; i < studenti; i++){
lista.push_back(i+1);
}
while(true){
cout << "Selezionare \'*\' per generare un\' estrazione o 0 per uscire\n";
char azione;
cin >> azione;
if(azione == '*'){
int random = rand()%(studenti); // accessi 0 a studenti - 1
int numero = lista[random];
cout << numero << "\n";
remove(lista, random);
studenti = studenti - 1;
} else break;
}
return 0;
}