顺序容器 - 3【C++ Primer 学习笔记 - 第九章】

string 操作
string s; 定义一个新的空string 对象,命名为 s
string s(cp); 定义一个新的 string 对象,用 cp 所指向的 C风格字符串初始化该对象
string s(s2); 定义一个新的 string 对象,将其初始化为 s2 的副本
is >> s; 从输入流 is 中读取一个以空白字符分隔的字符串,写入 s
os << s; 将 s 写入到输出流 os 中
getline( is, s); 从输入流 is 中读取一行字符,写入 s
s1+ s2; 将 s1 和 s2 串接起来,产生一个新的 string 对象
s1 += s2; 将 s2 拼接在 s1 后面
关系操作符 ==
!=
<
<=
>
>=












string 可以看成字符容器,同 vector 一样,连续存储,支持 capacity 和 reserve 操作。
支持 begin 、 end、 erase、 clear 等操作,
但是,不支持 push_front、back、front 等操作。


string s("Hello world");
string::iterator iter = s.begin();
while(iter!=s.end())
	cout << *iter++;
cout << endl;


构造 string 对象的其他方法
string s(cp, n) 创建一个string 对象,它被初始化为 cp 所指向数组的前 n 个元素的副本
string s(s2, pos2) 创建一个 string 对象,
它被初始化为一个已经存在的 string 对象 s2 中从下标 pos2 开始的字符串副本
如果 pos2 > s2.size(); 则操作未定义
string s(s2, pos2, len2) 创建一个 string 对象
它被初始化为 s2 中从下标 pos2 开始的 len2 个字符的副本。
如果 pos2 > s2.size(); 则操作未定义
无论 len2 是多少,最多只能复制 s2.size() - pos2 个字符










string s1;
string s2(5, 'a');
string s3(s2);
string s4(s3.begin(), s3.begin() + s3.size()/2);

char *cp = "Hiya";
char c_array[] = "world!!!!";
char no_null[] = {'H', 'i'};
string s5(cp);		// "Hiya"
string s6(c_array, 5);	// "world"
string s7(c_array+5, 4);	// "!!!!"
// 错误:string s8(no_null);  no_null 不是空字符结尾
string s8(no_null, 2);

// 注意与 string s6(c_array, 5); 的区别
string s9(s5, 2);	// "ya"
string s10(s5, 0, 2);	// "Hi"
string s11(s5, 0, 100);	// "Hiya"


string 类型特有的版本(此表除非特殊说明,都返回 s 的引用)
s.insert(pos, n, c) 在下标为 pos 的元素之前插入 n 个字符 c
s.insert(pos, s2) 在下标为 pos 的元素之前插入 string 对象的副本 s2
s.insert(pos, s2, pos2, len) 在下标为 pos 的元素之前插入 s2 中从下标 pos2 开始的 len 个字符
s.insert(pos, cp, len) 在下标为 pos 的元素之前插入 cp 所指向的数组的前 n 个字符
s.insert(pos, cp) 在下标为 pos 的元素之前插入 cp 所指向的以空字符结束的字符串的副本
s.assign(s2) 用 s2 的副本替换 s
s.assign(s2, pos2, len) 用 s2 中从下标 pos2 开始的 len 个字符副本替换 s
s.assign(cp, len) 用 cp 指向的数组的前 len 个字符副本替换 s
s.assign(cp) 用 cp 指向的以空字符结束的字符串副本来替换 s
s.erase(pos, len) 删除从下标 pos 开始的 len 个字符










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章