Камрад, да они все рабочие, меня интересует мнения и оценки о приемлимости/безопасности/эффективности.
А так как в меру своих знаний, пока оных сделать не могу, хочется узнать у знающих людей.
> Камрад, да они все рабочие, меня интересует мнения и оценки о приемлимости/безопасности/эффективности. > А так как в меру своих знаний, пока оных сделать не могу, хочется узнать у знающих людей.
Вас не смущает, что вектор и строка получаются у вас нулевой длины?
В любом случае, то, что они у вас работают — всего лишь один из вариантов неопределенного поведения. Возмете другую версию STL — и первые два варианта запросто могут перестать работать Третий вариант, строго говоря, тоже работать не обязан, но вряд ли не будет работать на практике. А вообще, если не ищете себе приключений — сделайте так, как вам тут аноним советовал.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Заменить reserve на resize нужно, естественно, и в варианте с вектором. Проглядел.
Re: safe char* array используя STL классы
От:
Аноним
Дата:
27.09.07 16:41
Оценка:
Насчет 1 и 2 — стандартом не сказано что std::string должен хранить символы строго последовательно в памяти. Хотя многие реализации STL делают так (но не все и не всегда!)
3 — совершенно безопасен с точки зрения стандарта.
Re: safe char* array используя STL классы
От:
Аноним
Дата:
27.09.07 18:53
Оценка:
Здравствуйте, j s p, Вы писали:
Если твоя ф-ция модифицирует передаваемую строку (а судя по тому, что первый параметр указатель на не константу, то так оно и есть) JSP>
JSP>void f(char*, int); // и т.п.
JSP>
и изменения должны быть сохранены в s, то правильным есть только вариант с вектором.
Или я не понял сути вопроса.
Здравствуйте, j s p, Вы писали:
JSP>Здравствуйте, pavel_turbin, Вы писали:
_>>Не забудте на 0 длину проверить. Иначе вектор по ассерту грохнется на &a[0].
JSP>В смысле? Это в каком месте?
vector<char> s;
s.resize(0);
&s[0]; // assert: "vector subscript out of range"