std::string, копирование с трансформацией символов
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.07.18 14:17
Оценка:
Проблема на ровном месте

Есть строка, которую надо скопировать в 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 или нужно изобретать свой велосипед?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.