
AMDG Joseph Gauterin <joseph.gauterin <at> googlemail.com> writes:
Variable-width-encoded strings should be fairly straightforward when they are immutable, but will probably get hairy when they can be modified. True. I think the strings should be immutable. I think experience with Java and C# compared to C++ shows that an immutable string class is superior in most use cases
I also agree that immutable strings are the way forward for VWEs.
If we had mutable strings consider how badly the following would perform: std::replace(utfString.begin(),utfString.end(),SingleByteChar,MultiByteChar);
Although this looks O(n) at first glance, it's actually O(n^2), as the container has to expand itself for every replacement. I don't think a library should make writing worst case scenario type code that easy.
I agree that mutable iterators are not a good idea, since they make an operation that is normally O(1) linear. In addition, *iter = MultiByteChar would invalidate all the other iterators to the string causing your example to crash. However, I see no reason to prevent usage like std::replace_copy(utfString.begin(), utfString.end(), std::back_inserter(newutfString), SingleByteChar MultibyteChar); In Christ, Steven Watanabe