Ответы Mail.ru: C++ исключение std::out_of_range

Ошибка out of range возникает, потому что в коде используется метод vector::at, который выбрасывает исключение std::out_of_range в случае, если переданный индекс выходит за границы вектора.

В данном случае, проблема заключается в том, что при первом вызове метода

result.at

(counter) в векторе result еще не было выделено достаточное количество элементов, чтобы записать значение в

result.at

(counter). Чтобы исправить эту проблему, нужно использовать метод vector::push_back() для добавления элемента в конец вектора.

Исправленный код может выглядеть так:

 void separateStr(string source, char separator, vector &result)  
{  
	string buffer = "";  
	bool isSourceSeparated = false;  
  
	for (unsigned i = 0; i <= source.size(); i++)  
	{  
		if (i == source.size())  
		{  
			result.push_back(buffer);  
			break;  
		}  
  
		if (source[i] == separator)  
		{  
			isSourceSeparated = true;  
			result.push_back(buffer);  
			buffer = "";  
		}  
		else  
		{  
			buffer += source[i];  
		}  
	}  
  
	if (!isSourceSeparated) result.push_back(source);  
} 
 

Теперь метод vector::push_back() используется для добавления элементов в вектор result. Этот метод автоматически выделяет достаточное количество памяти для хранения нового элемента и увеличивает размер вектора на 1. Таким образом, проблема out of range больше не возникает.