c++ primer第三章总结(string,vector,迭代器)

在这一章里面主要分几个部分命名空间using,标准库类型string,vector,迭代器的简单介绍,数组等

3.1命名空间的using声明

在c++中通常使用using namespace std

3.2标准库类型string

标准库类型string表示可变长的字符序列,使用string类型须包含strirng头文件

定义和初始化string对象

string s1;					//默认初始化,s1是一个空串
string s2(s1);				//直接初始化,s2是s1的副本
string s2=s1;				//拷贝初始化,s2是s1的副本
string s3("value");			//直接初始化,s3是"value"的副本,除了最后的空字符
string s3="value";			//拷贝初始化
string s4(10,'c');			//直接初始化,s4初始化之后的内容是cccccccccc
string s5 = string(10,'c');	//拷贝初始化,s5的内容是cccccccccc

string的操作

内容 说明
getlin(is ,s) 从is中读取一行赋值给s,返回is
s.empty() s为空为true,否则flase
s.size() 返回s中字符的个数
s[n] 返回第n个字符的引用,位置从0开始
s1+s2 返回s1和s2连接的结果
s1=s2 用s2的副本代替s1中的内容
s1==s2 s1和s2中字符完全一样则相等,对大小写敏感
s1!=s2 判断不相等,对大小写敏感
<,>,>=,<= 字符在字典中的顺序进行比较,对大小写敏感

string注意点
其实这只是我自己的笔记
1.定义string时,string对象会自动忽略开头空白,并从第一个字符真正的字符开始读起,直到遇见下一个空白
2.getline是读取一整行,包括空白,遇到换行符为止,换行符也被读进来了,但是不保存到string对象中去
3.每个加法运算符的两侧运算对象至少有一个是string

string s1="hello";
string s2=s1+'world';	//正确:有一个string对象
string s5="hello"+"world"; 	//错误:两个运算对象都不是string

3.3标准库类型vector

标准库类型vector表示对象的集合,其中所有对象的类型都相同

定义和初始化vector对象

vector<T> v1;		//v1是一个空vector,潜在的元素是T类型,默认初始化
vector<T> v2(v1);	//v2中含有v1所有元素的副本
vector<T> v2=v1;	//和v2(v1)等价
vector<T> v3(n,val);	//v3中包含了个重复的元素,每个重复元素的值是val
vector<T> v4(n);	//v4中包含了n个重复地执行了值初始化的对象
vector<T> v5{a,b,c...}; //列表初始化:v5包含了初始值个数的元素,每个元素被赋予相应的初始值
vector<T> v5={a,b,c...}; //和上面等价

vector是个类模板,编译器根据模板创建类或函数的过程称为实例化,当使用模板时,需要指出编译器应该把类或者函数实例化成什么类型。

如果用的圆括号可以说提供的值是用来构造对象,如果用的是花括号,可以表述成列表初始化,在无法列表初始化时也会进行其他初始化方式,如下:

vector<int> v1(10);		//v1有10个元素,每个的值都是0
vector<int> v1{10};		//v2有一个元素,元素的值是10
vector<string> v3("hi");	//错误,不能用字符串构建vector对象
vector<string> v4{10"hi"}; //v8中有10个值为"hi"的元素

vector的操作

内容 描述
v.empty() 如果v中不含有任何元素,返回真,否则假
v.size 返回v中元素个数
v.push_back(t) 向v的尾端添加一个值为t的元素
v[n] 返回v中第n个位置上的引用

其他的都和string差不多,不想写了。。。。。。

迭代器介绍

在前面介绍的string和vector中可以用for循环处理每个字符,方式是: string str("hello"); for(auto c:str){....}我们通过auto关键字,让编译器决定c的类型,这里c的类型是char,每次迭代,str的下一个字符被拷贝给c,注意这里是c++11的标准,使用GUN编译器是要加上-std=C++11。

迭代器的成员一般是用两个begin和end,其中begin成员负责返回指向第一个元素的迭代器,end成员返回指向容器的最后一个元素的下一位置,迭代器运算符包括*iter iter->men (*iter).men ++iter --iter iter1==iter2 iter1!=iter2

迭代器的类型是iterator const_iterator

在现代c++程序中应该尽量用vector和迭代器,,避免使用内置数组和指针,应该尽量使用string,避免使用c风格的字符串
所以数组的知识这里就不介绍了
我个人比较感兴趣的是c++11数组也引入了begin和end,使用方法是将数组作为参数

int ia[]={0,1,2,3,4,5};
int *beg=begin(ia);	//指向ia首元素的指针
int *last=end(ia);	//指向arr尾元素的下一位置的指针
发布了14 篇原创文章 · 获赞 3 · 访问量 1782

猜你喜欢

转载自blog.csdn.net/qq_44708426/article/details/105306578