Frage

Ich schreibe einige Code-Beispiele von „How Wie ein Informatiker in C denken ++“, und dies ist über den Umgang mit Spielkartentyp Objekten und Decks. Ich bin diese Situation konfrontiert:

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;
}

Ich konnte nicht ".length ()" auf einem Vektor in C ++ in Visual Studio 2010, wie im Text verwenden und stattdessen verwenden .Size hatte (), die Renditen (glaube ich) std :: size_type. Ich dachte, ich size_t verwenden könnte und damit zu vermeiden, um Probleme auf verschiedene Architekturen weg, wie ich Lesung bin, aber ich frage mich, ob ich i zurückkehren, aber es ist größer als eine ganze Zahl ist, werde ich das Programm zum Absturz bringen?

[Edited spezifischere in meiner Frage zu sein:] Sobald ich mit Vektoren für größere Dinge als Karten starten, dachte ich wegen eines Compilers Mismatch Warnung unsigned int, aber ich fühle mich Rückkehr einen unsigned int oder int hat ein paar Fragen: 1) int nicht einen ausreichend großen Vektorindex nehmen. 2) unsigned int Rückkehr läßt mich nicht -1 zurück. 3) unsigned int ist gleich nicht zu size_t auf allen Architekturen (ich tue Mikrocontroller-Programmierung auf einem ARM Cortex-M3 auch).

Was soll ich tun, wenn ich jemals einen ausreichend großen Vektor hat?

War es hilfreich?

Lösung

Casting from size_t to int will not "crash" your program, but it's a bad bad practice. On the other hand, STL includes nice find algorithm for what you are doing.

Andere Tipps

int is 32 bit on 32 / 64 bit Windows and Linux. i will get truncated if greater than two at the 31st. you could use unsigned int and your program will be fine unless storing more than 4 G elements in the vector :)

size_t is typically an unsigned int but you can't rely on that. If it's bigger than an int you won't crash, you'll just overflow into a (probably negative) number.

Assuming you're not going to have several tens of thousands of cards in one vector, I'd be happy returning the int.

You can also return std::pair<size_t, bool>, similar to std::map insert(). Second template argument means success or fail.

If you ok with this, you could also use boost::optional

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top