Я пишу несколько примеров кода из «Как мыслить как компьютерный специалист на 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) возврат неподписанного int не даст мне вернуть -1. 3) unsigned int не равен size_t на всех архитектурах (я также занимаюсь программированием микроконтроллеров на ARM Cortex-M3).
Что мне делать, если у меня будет достаточно большой вектор?