Цитата: Объясни только, зачем читать из потока (файла) в строку, затем передавать её копию другому потоку (памяти), и только оттуда уже парсить?
Ну, например, если я читаю не из обычного файла, а из сокета. Более того: данные могут быть зашифрованы (OpenSSL), т.е. их еще нужно пропустить через библиотеку OpenSSL. Можно, конечно, написать свой класс потока (или буфера, незнаю точно) для чтения из сокетов, и как вариант - из зашифрованных сокетов, но это долгий путь. Мне это нужно было всего-то для одной маленькой части одного большого проекта. Вот я и использовал std:string как накопительный буфер для получаемых данных, которые получались кусочками по 512 байт (специфика протокола), и все эти кусочки склеивал в std::string, а потом эту строку передавал в istringstream::str() и оттуда парсил. В общем, создавалась куча временных объектов, с множеством копирований/дублирований одних и тех же кусков одной и той же строки, и всего этого можно было избежать, если б время не поджимало. И вот теперь время не очень поджимает, и хочется разобраться. Но ситуация немного другая: есть входной буфер данных, я его пока что держу в std::string. Для парсинга юзаю string::find_first_of, string::find_last_of, string::find_first_not_of, string::find_last_not_of. Так вот, у меня теперь такой вопрос: допустим, я нашёл какой-то кусок строки (скажем, начиная с 3-го и заканчивая 8-м символом строки), который мне нужно теперь преобразовать в число. Как это можно сделать наиболее оптимальным образом? Или, например, мне нужно передать этот кусок в функцию, которая потом скопирует его в std::string. Как это сделать без испотльзования лишних объектов/копирований? Можно ли использовать 2 итератора (на начало и конец отрезка), передать их в функцию, которая потом уже с их помощью инициализирует std::string? Или лучше/оптимальней передать этой функции найденные числовые индексы начала и конца строки, и ссылку на строку-буфер?
Цитата: ты реально смотрел разницу во времени работы программы, прежде чем утверждать, что вот в этом конкретном месте программы каждый десяток миллисекунд важен?
Вот эту табличку я сегодня нарыл в инете, поэтому и поднял вопрос:
http://www.codeproject.com/string/string_conversions.asp Цитата: Не пробовал пользоваться
Код:std::locale locRus("RUS");
someStream.imbue(locRus);
?
Дык в том-то и дело, что мне не нужна работа с локалями. Я работаю в основном с сетевыми протоколами, а там везде локаль один стандартный юзается - С (или POSIX). Т.е., мне не нужно число 12345678 представлять в форме 12 345 678 или 12,345,678, и наоборот тоже.