开发者

Standard Template String class: string.fill()

I need a way to create a string of n chars. In this case ascii value zero.

I kn开发者_开发知识库ow I can do it by calling the constructor:

string sTemp(125000, 'a');

but I would like to reuse sTemp in many places and fill it with different lengths.

I am calling a library that takes a string pointer and length as an argument and fills the string with bytes. (I know that technically string is not contiguous, but for all intents and purposes it is, and will likly become the standard soon). I do NOT want to use a vector.

is there some clever way to call the constructor again after the string has been created?


The string class provides the method assign to assign a given string a new value. The signatures are

1. string& assign ( const string& str );
2. string& assign ( const string& str, size_t pos, size_t n );
3. string& assign ( const char* s, size_t n );
4. string& assign ( const char* s );
5. string& assign ( size_t n, char c );
6. template <class InputIterator> 
     string& assign ( InputIterator first, InputIterator last );

Citing source: cplusplus.com (I recommend this website because it gives you a very elaborated reference of the C++ standard libraries.)

I think you're looking for something like the fifth one of these functions: n specifies the desired length of your string and c the character filled into this string. For example if you write

sTemp.assign(10, 'b');

your string will be solely filled with 10 b's.

I originally suggested to use the STL Algorithm std::fill but thus your string length stays unchanged. The method string::resize provides a way to change the string's size and fills the appended characters with a given value -- but only the appended ones are set. Finally string::assign stays the best approach!


Try to use:

sTemp.resize(newLength, 'a');

References:

void __CLR_OR_THIS_CALL resize(size_type _Newsize)
    {   // determine new length, padding with null elements as needed
    resize(_Newsize, _Elem());
    }

void __CLR_OR_THIS_CALL resize(size_type _Newsize, _Elem _Ch)
    {   // determine new length, padding with _Ch elements as needed
    if (_Newsize <= _Mysize)
        erase(_Newsize);
    else
        append(_Newsize - _Mysize, _Ch);
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜