c++ 字符串、向量和数组 2018.3.30
1、标准库类型string表示可边长的字符序列,定义在命名空间std中,要使用的话:
#include <string>
using std::string;
string s1;
2、读取未知数量的string对象:
while (cin >> word)...
3、使用getline读取一整行
getline从输入流中读取内容,直到遇倒换行符为止,然后存到一个string对象中去(注意不存换行符)
getline函数的参数是一个输入流和一个string对象
string line;
while (getline(cin,line);
cout <<line<<endl;//因为不存换行符
4、标准库类型 vector(容器)
表示对象的集合,其中所有的对象的类型都相同,每个对象都有一个用于访问的索引。vector也称为容器。同样使用方法: #include <vector>
using std::vector;
vector是一个类模板,本身不是类或者函数,可看作为编译器生成类或者函数编写的一份说明,编译器根据模板创建类或函数的过程称为实例化,当使用模板时,要指出编译器要把类或函数实例化为何种类型。
vector<T> v1;//v1容器保存T类型的元素,空的vector对象。
vector<T> v1(v2);//把v2的元素拷贝给v1;或者写成v1=v2
vector<string> v1={“a”,"an","the"};//列表初始化
vector<int> v1(10);//v1有10个元素,且每个值都是0;若把int换成string,就代表10个都是空的string对象
vector<int> v1(10,1);//10个元素都是1;若把()换成{},则表示只有两个元素,10和1;
v1.push_back(x);//将x添加到v1的末尾;注意,vector对象不能通过下标形式添加元素。但可以对已知存在的元素进行下标操作(如访问),不存在的不能访问会报溢出错误。
5、迭代器iterator
所有标准库容器都可以使用迭代器,可访问容器中的元素或者string对象中的字符;
auto类型说明符,c++11新标准,能让编译器替我们去分析表达式所属的类型,auto定义的变量必须有初始值(int、double的意思)自动的分析定义的变量应该是什么类型,根据初始值来决定。
迭代器可以和指针一样理解;和指针不同的是,获取迭代器不是使用取地址符,begin和end都是返回的迭代器
和指针类似,能通过解引用迭代器来获取它所指示的元素/对象,即(*迭代器)
6、数组
与vector相同的是:也是存放类型相同对象的容器,这类对象本身没有名字,需要通过其所在位置访问
与vector不同的是:数组的大小确定不变,不能随意向数组中添加元素
所以如果不清楚元素的确切个数,请使用vector
数组不允许拷贝和赋值给其他数组
数组的名字就是指向数组首元素的指针
int ia[] = {0,2,4,6,8};
int last = *(ia+4);//last=8
数组中的标准库函数begin和end用法不同于迭代器,而是将数组作为他的参数:
int *beg = begin(arr);//指向arr首元素的指针
对数组使用下标运算符时,体会指针操作:
7、多维数组
size_z
size_type