Domanda

Sto scrivendo alcuni esempi di codice da "Come pensare come uno scienziato di computer in C ++", e questo è sulla gestione di oggetti di tipo di gioco-carte e ponti. Sto affrontando questa situazione:

int Card::find(const std::vector<Card>& deck) const {
    size_t deckSize = deck.size();
    for (size_t i=0; i<deckSize; i++)
        if (equals(*this, deck[i])) return i;

    return -1;
}

Non ho potuto usare ".length ()" a un vettore in C ++ in Visual Studio 2010 come nel testo, e invece ha dovuto usare .size (), che restituisce (credo) std :: size_type. Ho pensato che avrei potuto usare size_t e farla franca al fine di problemi evitare nelle diverse architetture, come ho letto, ma mi chiedo se torno i, ma è più grande di un intero, posso mandare in crash il programma?

[Edited per essere più precisi nella mia domanda:] Una volta che iniziare a utilizzare vettori per le cose più grandi di carte, ho pensato di utilizzare unsigned int a causa di una mancata corrispondenza avviso del compilatore, ma mi sento di tornare un int unsigned int o ha un paio di problemi: 1) int non avrà un numero sufficientemente ampio indice di vettore. 2) il ritorno unsigned int non mi permette di tornare -1. 3) unsigned int non è uguale a size_t su tutte le architetture (sto anche facendo programmazione dei microcontrollori su un ARM Cortex-M3).

Cosa devo fare se ho mai avuto una grande abbastanza vettore?

È stato utile?

Soluzione

Casting da size_t a int non "crash" del programma, ma è una pratica male male. D'altra parte, STL include bel find algoritmo per quello che state facendo.

Altri suggerimenti

int è 32 bit su 32/64 bit di Windows e Linux. mi metterò troncato se maggiore di due al 31 °. è possibile utilizzare unsigned int e il programma andrà bene se non memorizzare più di 4 elementi G nel vettore:)

size_t è tipicamente un unsigned int ma non si può fare affidamento su questo. Se è più grande di un int non andrà in crash, devi semplicemente troppo pieno in un numero (probabilmente negativo).

Supponendo che non hai intenzione di avere diverse decine di migliaia di carte in un vettore, sarei felice di restituire il int.

È possibile anche restituire std::pair<size_t, bool>, simile a std::map insert(). Secondo i mezzi di argomento modello di successo o fallire.

Se si ok con questo, si potrebbe anche utilizzare boost :: opzionale

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top