Как справиться с «элементом, не найденным» ситуациями в функции поиска?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как справиться с «элементом, не найденным» ситуациями в функции поиска?

Сообщение Anonymous »

Я часто сталкиваюсь с ситуацией, когда мне нужно каким -то образом сообщить о том, что поиск предмета потерпел неудачу. Поскольку есть много способов, как справиться с такой ситуацией, я всегда не уверен, как это сделать. Вот несколько примеров: < /p>

class ItemCollection
{
public:

// Return size of collection if not found.
size_t getIndex(Item * inItem)
{
size_t idx = 0;
for (; idx != mItems.size(); ++idx)
{
if (inItem == mItems[idx])
{
return idx;
}
}
return idx;
}

// Use signed int and return -1 if not found.
int getIndexV2(Item * inItem)
{
for (int idx = 0; idx != mItems.size(); ++idx)
{
if (inItem == mItems[idx])
{
return idx;
}
}
return -1;
}

// Throw exception if not found.
size_t getIndexV3(Item * inItem)
{
for (size_t idx = 0; idx != mItems.size(); ++idx)
{
if (inItem == mItems[idx])
{
return idx;
}
}
throw std::runtime_error("Item not found");
}

// Store result in output parameter and return boolean to indicate success.
bool getIndex(Item * inItem, size_t & outIndex)
{
for (size_t idx = 0; idx != mItems.size(); ++idx)
{
if (inItem == mItems[idx])
{
outIndex = idx;
return true;
}
}
return false;
}

private:
std::vector mItems;
};
< /code>

Я использовал все это в какой -то момент в моем (молодого) программировании Carreer. Я в основном использую подход «Возврат размера коллекции», потому что он похож на то, как работают итераторы STL. Тем не менее, я хотел бы сделать более образованный выбор в будущем. Итак, на каких принципах дизайна должно быть основано на решении о том, как справиться с не облегающими ошибками?

Подробнее здесь: https://stackoverflow.com/questions/197 ... d-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»