注:std::string C++11标准。
string概述
typedef basic_string<char> string;
字符串是表示字符序列的对象。
标准string类使用类似于字节标准容器的接口提供对此类对象的支持,但是添加了专门用于操作单字节字符(single-byte characters)的字符串的特性。
string类是basic_string类模板的实例化,该模板使用char作为其字符类型,并具有默认的char_traits和allocator类型。
需要注意的是,这个类独立于所使用的编码来处理字节(即与编码无关):如果用于处理多字节或可变长度字符(如UTF-8)的序列,那么这个类的所有成员(如长度或大小)及其迭代器仍将以字节(而不是实际编码的字符)进行操作。
成员类型
| 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 |
成员函数
- (constructor) 构造函数
| default (1) |
string(); |
|---|---|
| copy (2) |
string (const string& str); |
| substring (3) |
string (const string& str, size_t pos, size_t len = npos); |
| from c-string (4) |
string (const char* s); |
| from buffer (5) |
string (const char* s, size_t n); |
| fill (6) |
string (size_t n, char c); |
| range (7) |
template <class InputIterator> string (InputIterator first, InputIterator last); |
| initializer list (8) |
string (initializer_list<char> il); |
| move (9) |
string (string&& str) noexcept; |
构造函数示例:
// string constructor #include <iostream> #include <string> int main () { std::string s0 ("Initial string"); // constructors used in the same order as described above: std::string s1; std::string s2 (s0); std::string s3 (s0, 8, 3); std::string s4 ("A character sequence"); std::string s5 ("Another character sequence", 12); std::string s6a (10, 'x'); std::string s6b (10, 42); // 42 is the ASCII code for '*' std::string s7 (s0.begin(), s0.begin()+7); std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3; std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a; std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n'; return 0; } Output: s1: s2: Initial string s3: str s4: A character sequence s5: Another char s6a: xxxxxxxxxx s6b: ********** s7: Initial