一旦你创建的字符串,了解他们是如何长常常是很有用的。这是在长度和容量的操作来发挥作用。我们还将讨论各种方式将std::string返回C风格字符串,所以你可以用功能,期待char*类型字符串中使用它们。
一个字符串的长度
字符串的长度是相当简单的字符串中的字符数。有确定的字符串长度的两个相同的功能:
size_type string::length() const
size_type string::size() const
Both of these functions return the current number of characters in the string, excluding the null terminator.
Sample code:
string sSource("012345678");
cout << sSource.length() << endl;
Output:
9
bool string::empty() const
Returns true if the string has no characters, false otherwise.
Sample code:
string sString1("Not Empty");
cout << (sString1.empty() ? "true" : "false") << endl;
string sString2; // empty
cout << (sString2.empty() ? "true" : "false") << endl;
Output:
false
true
注意能力大于字符串的长度!虽然我们的字符串的长度为8,字符串实际上分配足够的内存为15字!为什么要这样做?
认识到这最重要的是,如果用户想把更多的字符到字符串的字符串具有比容量,字符串必须被重新分配到一个更大的能力。例如,如果一个字符串的长度和容量的8,然后添加任何字符的字符串将力重新分配。通过容量大于实际的字符串,这给用户一些缓冲室扩大之前的字符串分配需要做的。
事实证明,再分配几个原因是坏的:
首先,将一个字符串比较贵。首先,新的记忆已被分配。然后,字符串中的每个字符都被复制到新的记忆。这可以如果字符串是大花很长的时间。最后,旧的记忆已被释放。如果你做了大量的重新分配,这个过程可以减缓你的程序明显下降。
第二,每当一个字符串的字符串的重新分配,改变到一个新的内存地址的内容。这意味着所有的参考文献,指针,和迭代器字符串无效!
请注意,这并非总是如此,字符串将被分配容量大于长度。考虑下面的程序: