Проблема на ровном месте
Есть строка, которую надо скопировать в std::string с приведением символов к верхнему регистру.
Как это сделать оптимальным способом?
Текущие варианты, которые не нравятся.
нулевой
устанавливаем строку в std::string и приводим символы к верхнему регистру. Нафига устанавливать данные, которые потом перезапишутся?
первый
делаем resize получателю и заменяем символы. не нравится resize — он установит значения символов, которые потом будут перезаписаны.
второй
делаем reserve и push_back-ом добавляем преобразованные символы. Не нравится push_back — он будет каждый раз пытаться резервировать место, которое и так уже есть.
Пока писал, на ум пришел шаблонный метод std::string::assign, которому передают хитрые итераторы, которые будут преобразовывать поток символов.
Как-то так:
char upper_char_op(char c) {...}
//...
transform_range r(source_begin, source_end, upper_char_op);
// оператор * будет пропускать символы через upper_char_op
std::string s(r.begin(), r.end());
То есть, в итоге, вопрос такой — в STL есть что-то подобное transform_range или нужно изобретать свой велосипед?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --