C++ Primer中文版(第五版)--第三章 字符串、向量和数组
2014-05-24 00:31
393 查看
一、标准库类型string
头文件#include <string>
1.1 定义和初始化string对象
[cpp] view
plaincopy
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操作
[cpp] view
plaincopy
#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对象
[cpp] view
plaincopy
#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读取一整行
[cpp] view
plaincopy
#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对象
[cpp] view
plaincopy
vector<int> ivec; //初始状态为空
vector<int> ivec2(ivec);
vector<string> articles = {"a", "an", "the"};
向vector对象中添加元素
成员函数push_back
vector不能使用下表添加元素
三、迭代器
所有标准容器都可以使用迭代器,但是只有少数几种才同时支持下表操作。vector和string支持下表操作,同时也支持迭代器
有迭代器的类型同时拥有返回迭代器的程序,比,这些类型都拥有begin和end的成员
迭代器运算符
[cpp] view
plaincopy
*iter //返回迭代器iter所指元素的引用
++iter //所指下一元素
--iter //所指上一元素
iter1 == iter2 //判断是否相等
iter1!= iter2 //不相等
迭代器类型
一般我们不需要清楚迭代器的精确类型。事实上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型。
[cpp] view
plaincopy
vector<int>::iterator it; //it能读写vector<int>的元素
string::iteraotr it2; //it2能读写string对象中的字符
vector<int>::const_iterator it3; //it3只能读取元素,不能写元素
string::const_iterator it4; //it4只能读字符,不能写字符
迭代器运算
[cpp] view
plaincopy
iter + n
iter - n
iter1 += n
iter1 -= n
iter1 - iter2
>, >=, <, <=
四、数组
数组是一种类似于标准库类型vector的数据结构,如果在不清楚元素的确定个数,请使用vector
数组的维度必须是一个常量表达式。
字符数组的特殊性
[cpp] view
plaincopy
char a2[] = {'C', '+', '+', '\0'}; //列表初始化,含有显式的空字符
char a3[] = "C++"; //自动添加表示字符串结束的空字符
const char a4[6] = "Daniel"; //错误:没有空间可存放空字符
C风格字符串
C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯写的字符串存放在字符数组中并以空字符结束。以空字符结束的意思是在字符串最后一个字符后面跟着一个空字符。
C标准 string 函数
[cpp] view
plaincopy
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风格字符串
[cpp] view
plaincopy
string s("Hello world"); //s的内容是Hello world
char *str = s; //错误: 不能用string对象初始化char*
const char *str = s.c_str(); //正确
使用数组初始化vector对象
[cpp] view
plaincopy
int int_arr[] = {0, 1,2,3,4,5};
vector<int> ivec(begin(int_arr),end(int_arr));
头文件#include <string>
1.1 定义和初始化string对象
[cpp] view
plaincopy
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操作
[cpp] view
plaincopy
#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对象
[cpp] view
plaincopy
#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读取一整行
[cpp] view
plaincopy
#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对象
[cpp] view
plaincopy
vector<int> ivec; //初始状态为空
vector<int> ivec2(ivec);
vector<string> articles = {"a", "an", "the"};
向vector对象中添加元素
成员函数push_back
vector不能使用下表添加元素
三、迭代器
所有标准容器都可以使用迭代器,但是只有少数几种才同时支持下表操作。vector和string支持下表操作,同时也支持迭代器
有迭代器的类型同时拥有返回迭代器的程序,比,这些类型都拥有begin和end的成员
迭代器运算符
[cpp] view
plaincopy
*iter //返回迭代器iter所指元素的引用
++iter //所指下一元素
--iter //所指上一元素
iter1 == iter2 //判断是否相等
iter1!= iter2 //不相等
迭代器类型
一般我们不需要清楚迭代器的精确类型。事实上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型。
[cpp] view
plaincopy
vector<int>::iterator it; //it能读写vector<int>的元素
string::iteraotr it2; //it2能读写string对象中的字符
vector<int>::const_iterator it3; //it3只能读取元素,不能写元素
string::const_iterator it4; //it4只能读字符,不能写字符
迭代器运算
[cpp] view
plaincopy
iter + n
iter - n
iter1 += n
iter1 -= n
iter1 - iter2
>, >=, <, <=
四、数组
数组是一种类似于标准库类型vector的数据结构,如果在不清楚元素的确定个数,请使用vector
数组的维度必须是一个常量表达式。
字符数组的特殊性
[cpp] view
plaincopy
char a2[] = {'C', '+', '+', '\0'}; //列表初始化,含有显式的空字符
char a3[] = "C++"; //自动添加表示字符串结束的空字符
const char a4[6] = "Daniel"; //错误:没有空间可存放空字符
C风格字符串
C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯写的字符串存放在字符数组中并以空字符结束。以空字符结束的意思是在字符串最后一个字符后面跟着一个空字符。
C标准 string 函数
[cpp] view
plaincopy
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风格字符串
[cpp] view
plaincopy
string s("Hello world"); //s的内容是Hello world
char *str = s; //错误: 不能用string对象初始化char*
const char *str = s.c_str(); //正确
使用数组初始化vector对象
[cpp] view
plaincopy
int int_arr[] = {0, 1,2,3,4,5};
vector<int> ivec(begin(int_arr),end(int_arr));
相关文章推荐
- c++ primer(第五版)学习笔记及习题答案代码版(第三章)字符串、向量和数组
- 《C++primer(第五版)》学习之路-第三章:字符串、向量和数组
- 第三章 字符串、向量、数组
- C++ Primer学习笔记之第三章--字符串,向量和数组
- C++ Primer 笔记——第三章 字符串、向量和数组
- [C++ primer]第三章笔记--字符串、向量和数组
- 第三章字符串,向量,数组
- 2017-4-28 C++笔记 (第三章 字符串、向量和数组)
- 《 C++ Primer 第五版》笔记(一):1-3章 变量和基本类型,字符串、向量和数组
- c++ primer概念整理第三章 字符串,向量,数组
- 第三章 字符串、向量和数组
- C++ Primer | 第三章 字符串、向量和数组
- 第三章 字符串、向量和数组
- 《C++ Primer 第五版》学习笔记-第三章-字符串、向量和数组
- 第三章 字符串、向量和数组学习笔记(第一遍阅读)
- 第三章 字符串,向量和数组
- c++ primer第三章 - 字符串、向量、数组
- 第三章 字符串、向量和数组
- 菜狗的C++ primer读书笔记:第三章 字符串、向量和数组
- C++学习笔记 | 第三章 字符串、向量和数组 | (1)