一、标准库类型string
头文件#include <string>
1.1 定义和初始化string对象
- string s1; //默认初始化,s1是一个空串
- string s2(s1); //s2是s1的副本
- string s2=s1; //等价于s2(s1),s2是s1的副本
- string s3("value"); //s3是字面值“value"的副本,除了字面值最后的那个空字符外
- string s3 = "value"; //等价于s3("value"),s3是字面值"value"的副本
- string s4(n,'c'); //把s4初始化为由连续n个字符c组成的串
- string s5 = "hiya"; //拷贝初始化
- string s6("hiya"); //直接初始化
1.2 string对象上的操作
读写string操作
- #include <iostream>
- #include <string>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- string s;
- cin >> s; //string对象会自动忽略开头的空白(空格符、换行符、制表符)
- cout << s << endl;
- return 0;
- }
在执行读取操作时,string对象会自动忽略开头的空白,并从第一个真正的字符开始读起,直到遇到下一处空白为止。
读取未知数量的string对象
- #include <iostream>
- #include <string>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- string word;
- while (cin >> word) //反复读取,直至到达文件末尾
- cout << word << endl;
- return 0;
- }
window系统中,按Ctrl + C结束。
使用getline读取一整行
- #include <iostream>
- #include <string>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- string line;
- //每次读入一行,直到文件末尾
- while ( getline(cin, line))
- cout << line << endl;
- return 0;
- }
这里getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符而止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。
string 的empty和size操作
比较string对象
为string对象赋值
两个string对象相加
字面值和string对象相加
二、标准库类型vector
使用的时候需要使用<vector>
定义和初始化vector对象
- vector<int> ivec; //初始状态为空
- vector<int> ivec2(ivec);
- vector<string> articles = {"a", "an", "the"};
向vector对象中添加元素
成员函数push_back
vector不能使用下表添加元素
三、迭代器
所有标准容器都可以使用迭代器,但是只有少数几种才同时支持下表操作。vector和string支持下表操作,同时也支持迭代器
有迭代器的类型同时拥有返回迭代器的程序,比,这些类型都拥有begin和end的成员
迭代器运算符
- *iter //返回迭代器iter所指元素的引用
- ++iter //所指下一元素
- --iter //所指上一元素
- iter1 == iter2 //判断是否相等
- iter1!= iter2 //不相等
迭代器类型
一般我们不需要清楚迭代器的精确类型。事实上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型。
- vector<int>::iterator it; //it能读写vector<int>的元素
- string::iteraotr it2; //it2能读写string对象中的字符
- vector<int>::const_iterator it3; //it3只能读取元素,不能写元素
- string::const_iterator it4; //it4只能读字符,不能写字符
迭代器运算
- iter + n
- iter - n
- iter1 += n
- iter1 -= n
- iter1 - iter2
- >, >=, <, <=
四、数组
数组是一种类似于标准库类型vector的数据结构,如果在不清楚元素的确定个数,请使用vector
数组的维度必须是一个常量表达式。
字符数组的特殊性
- char a2[] = {'C', '+', '+', '\0'}; //列表初始化,含有显式的空字符
- char a3[] = "C++"; //自动添加表示字符串结束的空字符
- const char a4[6] = "Daniel"; //错误:没有空间可存放空字符
C风格字符串
C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯写的字符串存放在字符数组中并以空字符结束。以空字符结束的意思是在字符串最后一个字符后面跟着一个空字符。
C标准 string 函数
- strlen(p); //返回p的长度,空字符不计算在内
- strcmp(p1,p2); //比较p1和p2的相等性 == 0, > 1 < -1
- strcat(p1,p2); //将p2附加在p1之后,返回p1
- strcpy(p1,p2); //将p2拷贝给p1,返回p1
此类函数的指针必须指向空字符作为结尾的数组。
比较字符串
比较标准库 string对象的时候,用的是普通的关系运算符和相等运算符。要比较C风格的,必须调用strcmp函数
与旧代码的接口
混用string对象和C风格字符串
- string s("Hello world"); //s的内容是Hello world
- char *str = s; //错误: 不能用string对象初始化char*
- const char *str = s.c_str(); //正确
使用数组初始化vector对象
- int int_arr[] = {0, 1,2,3,4,5};
- vector<int> ivec(begin(int_arr),end(int_arr));
本文详细介绍了C++标准库中的string和vector类型,包括定义、初始化、操作方法及迭代器使用等内容。此外还对比了数组和C风格字符串的特点,并提供了与旧代码兼容的方法。
--第三章 字符串、向量和数组&spm=1001.2101.3001.5002&articleId=26763407&d=1&t=3&u=605358fa39924a8890817b4fa7bae32f)
807

被折叠的 条评论
为什么被折叠?



