Если вы получаете индекс вне диапазона исключение, это, вероятно, потому что ваш индекс i
находится вне диапазона вектора dataResults
Если это не было очевиднодостаточно, если i
больше dataResults.size()
, тогда dataResults[i].clear();
сгенерирует исключение.
Редактирование:
Рассмотрите возможность замены циклов на основе индекса итераторами STL и замены вашего стиля cкастинг в стиле C ++.Ваше заявление if также может быть пересмотрено ...
Редактировать 2:
Было предположение о вероятной проблеме, поскольку вы не сообщили нам, что это за исключение, но у вас есть vector<vector<string>>
право?Если это так, вам нужно проверить, что вы индексируете в правильную позицию, прежде чем вызывать методы или создать свой цикл, чтобы он не индексировался за пределами.
Что-то вроде этого:
if (dataResults.size() > i)
{
// now we know dataResults[i] will be valid
dataResults[i].clear();
// etc
}
Честно говоря, я бы, вероятно, сделал что-то более похожее на это:
typedef std::vector<std::string> StrArray;
for(StrArray::const_iterator ret(r_OCRtoRetrieve.begin()); ret != r_OCRtoRetrieve.end(); ++ret)
{
// ret will be an const iterator to each string element in r_OCRtoRetrieve
for(StrArray::const_iterator entry(DBentries.begin()); entry != DBentries.end(); ++entry)
{
// entry will be an const iterator to each string element in DBentries
distance = calcDistance(ret->c_str(), entry->c_str());
// init new StrArray in dataResults as needed
// set new min distances as needed
// push back strings to dataResults
// whatever else you want to do
// yata yata
}
}