重新开始学C++的STL,从string开始,参考《C++ Primer Plus (第六版)》
string是一种模板类,原型为:
typedef basic_string<char> string;
template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string
构造函数主要有以下几种:
序号 | 构造方法 | 描述 |
---|---|---|
1 | string(const char *s) | 将string对象初始化为s指向的字符串 |
2 | string(size_type n,char c) | 创建一个包含n个元素的string对象,其中每个元素的值都被初始化为字符c |
3 | string(const string &str) | 拷贝构造,将一个string对象初始化为string对象str |
4 | string() | 默认构造函数,创建一个默认的string对象,长度为0 |
5 | string(const char *s,size_type n) | 将string对象初始化为s指向的字符串的n前n字节,即使n大于s的长度 |
6 | temple <class iter>string(iter begin,iter end) | 将string对象初始化为区间[begin,end)内的字符,其中begin和end的行为就像指针,用于指定位置,区间为左闭右开,即包含begin不含end |
7 | string(const string &str,string size_type pos=0,size_type n=pos) | 将一个string对象初始化为str中从位置pos开始到结尾的字符,或从位置pos开始的第n个字符(如果指定了n) |
测试代码: |
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1("std::string");
cout << str1 << endl;
string str2(10, 'a');
cout << str2 << endl;
string str3(str2);
cout << str3 << endl;
string str4;
str4 = str1;
cout << str4 << endl;
char* s = "Hello World";
string str5(s, 10);
cout << str5 << endl;
string str6(s + 1, s + 6);
cout << str6 << endl;
string str7(str1, 2, 7);
cout << str7 << endl;
return 0;
}
程序输出:
std::string
aaaaaaaaaa
aaaaaaaaaa
std::string
Hello Worl
ello
d::stri
string主要有下列方法:
方法 | 描述 |
---|---|
begin() | 指向字符串第一个字符的迭代器 |
cbegin() | 一个const_iterator,常量迭代器,即不可修改元素的值,指向字符串中的第一个字符(since c++11) |
end() | 为尾值的迭代器 |
cend() | 尾值的const_iterator(since c++11) |
rbegin() | 反向迭代器,reverse_iterator,从尾部开始 |
crbegin() | const类型的反向迭代器 |
rend() | 指向第一个元素的反向迭代器 |
crend() | 指向第一个元素的反向迭代器 |
size() | 字符串中的元素个数,即字符串长度(strlen),相当于begin()到end()之间的距离 |
length() | 等同于size() |
capacity() | 给字符串分配的元素数,可能会大于实际的字符数,capacity()-size()的值表示在字符串末尾附加多少字符后需要分配更多的内存 |
max_size() | 字符串的最大长度 |
data() | 一个执行数组第一个元素的const char *指针 |
c_str() | 获取C字符串指针 |
get_allocator() | 用于为字符串object分配内存的allocator对象的副本 |