13.大小(Size)与容量(Capacity)
size_t size() const
//和
size_t length() const
这两个函数都返回字符串内部存储的字符个数(不受 '\0'影响)。二者没有任何区别,后面仅以size()说明。
bool empty() const
返回是否是空字符串,size()或length()为零,但远比调用后二者再和0判断的操作来的高效。当软,如果当初命名为“is_empty()”就更完美了。
void resize(size_t n);
void resize(size_t n, char c);
重新设置字符串长度,如果新长度较大,则新出现的字符内容,要么为随机,要么为指定入参c字符的值。如果新长度较短,则超出的原有内容被抛弃。
注意,为了性能,std::string在正常的赋值过程中,尽管size()返回值会长长短短,内部实际申请的内存尺寸,通常是只增不减。
可以通过capacity()成员函数探测实际已经分配的内存数。
“hello world”,10个字符,再加一个空格字符,所以为11.
void shrink_to_fit();(仅C++ 11)
void reserve(size_t n = 0)
C++11提供了“shrink_to_fit()”成员函数,用于“祈求”一个std::string对象缩小内存。std::string可以听话地缩小到size(),但也可能根本不理。
C++98中就存在reserve函数,意思是“储备”,所以它更多地用于事先预分配内存(并不改变字符串的size()值),需要分配的元素个数使用n表示,如果n为0(默认值)并不是清空,事实上只要n比当前元素个数小,reserve就和shrink_to_fit()函数一个作用。
10.3.2 std::wstring
std::wstring用于处理宽字符串,宽字符类型为wchar_t。它有着和std::string类似的一整套的成员函数。
std::string和std::是同一个类模板产生的两个类,然后各自取的别名。这个类模板是:
std::basic_string <typename charT>
typedef std::basic_string <char> string;
typedef std::basic_string <wchar_t> wstring;
在屏幕输出方面,string对应cout / cin,wstring 则对应 wcout / wcin,只是后者在mingw环境下没有得到完整实现。
在内存字符流方面,string 对应 stringstream / istringstream / ostringstream,
wstring 则对应 wstringstream / wistringstream / wostringstream。