lowerStr1
пусто, и std::transform
не будет вставлять в него элементы.
std::transform
применяет данную функцию к диапазону и сохраняет результат в другом диапазоне, начиная с d_first
.
. Вы можете использовать std::back_inserter
, который создает std::back_insert_iterator
, что вызовет push_back()
на контейнере для вставки элементов.
transform(str1.begin(), str1.end(), back_inserter(lowerStr1), ::tolower);
или сделать lowerStr1
, содержащий 5 элементов заранее.
string lowerStr1(5, '\0');
transform(str1.begin(), str1.end(), lowerStr1.begin(), ::tolower);
или
string lowerStr1;
lowerStr1.resize(5);
transform(str1.begin(), str1.end(), lowerStr1.begin(), ::tolower);
Может кто-нибудь объяснить, почему lowerStr1
должна быть инициализирована в этом случае?
Это потому, что вы инициализируете lowerStr1
, содержащую 5 элементов заранее, как указано выше. Какое значение инициализированных элементов на самом деле не имеет значения.