Сравните с size_t, верните int?

Я пишу несколько примеров кода из книги «Как думать как компьютерный ученый на C ++», и этот посвящен обработке объектов типа игральных карт. Я столкнулся с такой ситуацией:

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

Я не мог использовать ".length ()" для вектора на C ++ в Visual Studio 2010, как в тексте, и вместо этого должен был использовать. size (), который возвращает (я считаю) std :: size_type. Я подумал, что могу использовать size_t и избежать проблем на разных архитектурах, как я читал, но мне интересно, верну ли я i , но это больше, чем целое число, я могу вылететь из программы?

[Отредактировано, чтобы быть более конкретным в моем вопросе:] Как только я начал использовать векторы для более крупных объектов, чем карты, я подумал об использовании unsigned int из-за предупреждения о несоответствии компилятора, но я чувствую, что возвращение unsigned int или int имеет несколько проблем: 1) int не будет принимать достаточно большой векторный индекс. 2) возвращение unsigned int не позволит мне вернуть -1. 3) unsigned int не равно size_t на всех архитектурах (я также занимаюсь программированием микроконтроллеров на ARM Cortex-M3).

Что мне делать, если у меня когда-либо будет достаточно большой вектор?

5
задан darvelo 16 December 2010 в 19:08
поделиться