http://www.cplusplus.com/reference/string/string/?kw=string
定义:
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
成员类型:
member type definition value_type char traits_type char_traits<char> allocator_type allocator<char> reference char& const_reference const char& pointer char* const_pointer const char* iterator a random access iterator to char (convertible to const_iterator) const_iterator a random access iterator to const char reverse_iterator reverse_iterator<iterator> const_reverse_iterator reverse_iterator<const_iterator> difference_type ptrdiff_t size_type size_t
成员函数:
size 返回长度不包括'\0';
length 与size相同;
capacity 存储能力,大于等于length,不断变化,最大不可以超过max_size;
max_size 理论上单个string的最大存储空间,实际很可能达不到;
reserve 预留空间;
empty 判断是否为空;
const char* c_str() const;
实际上每个string实现都容纳了下面的信息:
- 字符串的大小,也就是它包含的字符的数目。
- 容纳字符串字符的内存容量。(字符串大小和容量之间差别的回顾,参见条款14。)
- 这个字符串的值,也就是,构成这个字符串的字符。
一个string可能容纳
- 它的配置器的拷贝。
依赖引用计数的string实现也包含了
- 这个值的引用计数。
string中的数据并没有保证被存储在独立的一块连续内存中;
push_back一个字符,如果重新分配内存,则导致此string的迭代器/指针/引用失效;
测试用例:
string teststring("abc");
cout << teststring.size() << endl;
cout << teststring.length() << endl;
cout << teststring.max_size() << endl;
cout << teststring.capacity() << endl;
cout << sizeof(teststring) << endl; --- 一定要注意sizeof string,string占用的空间随版本实现的不同而不一样。
cout << sizeof(string) << endl;
cout << sizeof(teststring.c_str()) << endl; --- 这里返回一个char *,所以为4。
cout << strlen(teststring.c_str()) << endl;
3
3
1073741820
3
4
4
43
其他函数:
istream& getline (istream& is, string& str);