C++ STL string与vector
STL(Standard Template Library)即标准模板库,善用STL库,能有效的减少代码量,提高程序执行效率。
本文旨在介绍STL的string与vector。
string 字符串
- 头文件
1
- string的创建与初始化
1
2
3
4
5
6string s1;///创建空字符串s1
string s2(10, 'a');///创建s2,它由10个a构成,即"aaaaaaaaaa"
string s3("kagarise");///创建s3,即"kagarise",等效于string s3 = "kagarise"
string s4(s3);///创建s4 = s3;
string s5(s3, 0, 6);///创建s5,s5 = "kagari",即在s3上从第0位开始截取6位
string s6(s3, 2);///创建s6,s6 = "garise",即在s3上从第2位开始截取到字符串末位 - string的基本用法
string相较于c语言中的字符数组的一个方便的地方在于它可以用==,<,>,<=,>=,!=甚至+,+=这些基本运算符来操作字符串,而不必用strcmp等函数来判断字符串。并且string可以像字符数组一样用[]下标访问。1
2
3
4
5
6
7
8string s1 = "kagarise", s2 = "flora";
if(s1 < s2)///判断s1,s2的字典序大小,==和>等操作同理
cout << s1 << endl;
string ss = s1 + " and " + s2;///创建一个新的字符串ss = "kagarise and flora"
char s1_6 = s1[4];///字符s1_6保存了s1中的第4位字符,即'r' - string常用函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20string s = "kagarise", s1 = "flora";
s.size();///用来获取字符串s的长度,同样的,可用s.length()
s.erase(2);///删除字符串s从下标2及之后的所有字符,即"ka"
s.erase(2, 3);///删除字符串s从下标2开始,删除个字符,即"karise"
s.replace(2, 5, s1);///替换字符串s下标从2-5为s1,即"kaflorase"
s.substr(2, 3);///截取字符串s从下标为2开始,长度为3的字串,即"gar"
s.substr(2);///截取字符串s从下标为2开始到字符串末位的字串,即"garise"
s.find("ar");///在字符串中查找字符串"ar"第一次出现的位置
///若能找到,返回"ar"第一次出现的下标;反之返回string::npos,也可用-1来判定
s.find("ar", 5);///从下标5开始查找"ar"
s.find("ar", 5, 7)///在5-7的范围内查找"ar"
s.rfind("ar");///从字符串尾部开始查找"ar"
reverse(s.begin(), s.end());///翻转字符串从开头到结尾,即"esiragak"
///s.begin(),s.end()分别返回的是s的开始迭代器、结束迭代器vector 向量/不定长数组
- 头文件
1
- vector的创建与初始化
创建的vector存储的元素由<>里的数据类型决定。1
2
3
4vector<int> v;///创建空v
vector<int> v1(10);///创建v1,长度为10
vector<int> v2(10, 1);///创建v2,长度为10,且每个元素都为1
vector<int> v3 = v2;///创建v3 = v2 - vector的基本用法
1
2
3
4
5
6
7
8
9
10
11
12
13vector<int> v(10, 1);
v.size();///返回v中元素个数
v.clear();///清空v
v.push_back(3);///往v尾部添加一个元素3
v.pop_back();///删除末尾元素
///vector可以像数组一样用[]下标访问,也可以用迭代器访问
for(int i = 0; i < 10; i++)
cout << v[i] << endl;
for(vector<int>::it = v.begin(); it != v.end(); it++)
cout << *it << endl; - vector常用函数
vector就像一个数组一样,数组能完成的事情,vector同样也能完成。1
2
3
4
5
6
7
8
9///排序数组
sort();
///二分查找
lower_bound();
upper_bound();
///翻转
reverse();
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.