《C++ primer》第五版 第三章 笔记
2015-06-04 21:43
337 查看
string:
#include<string>
string test1; //空串
string test2 = "内容"; //使用=
string test3("内容"); //使用引用字符数组作为参数传给构造函数
string test4(test2); //用一个string初始化另一而string
string test5(test2,pos,num); //从test2中的第pos个位置开始,拷贝个数为num个字符
string test6 = test2 + "内容" + test3 //混合初始化
string test7 = test2.substr(pos,num); //从test2中的第pos个位置开始,拷贝个数为num个字符
string test8 = test2.substr(); //参数列表为空则会拷贝test2的整个对象(复制test2的简便方法)
string test9(num,ch); //拷贝num个字符型ch到test9
直接初始化:不使用等号
拷贝初始化:使用等号
当初始化的值有多个的时候,只能使用直接初始化的方式。
getline(is,s):从is中读取一行到s中
s.empty()
s.size()
string 对象会自动忽略开头的空白,并从第一个真正的字符开始读取,直到遇见下一处空白为止。
”Hello World “ 则 ”Hello“
cin两个,则输入” Hello world “ 输出: HelloWorld
getline(cin,line):(输入流,string对象)
while(cin>>world) string 忽略开头的空白,直到遇到下一个空白为止。
while(getline(cin,line)) 保留遇到的空白符,直到遇到换行符为止
string 的size类型:size_type 一个无符号的值,并且能够存下任何string对象的大小。
两个string对象相加;
字面值和string对象相加:必须确保每个+号两侧的运算对象至少有一个是string类型的
范围for:
for(declaration:expression)
l例子:
string s("Hello World");
for(auto &c:s)
c=toupper(c);
cout<<s<<endl;
访问string对象的单个字符:
(1)使用下标(2)使用迭代器
标准库类型:vector 容器
定义一个类就相当于创建了 一个新的class类型。要使用类,还必须用已经定义的类去说明它的实例变量(即对象)。在C++中,class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。
类模板+函数模板
vector是一个类模板
模板本身不是类或者函数,根据模板创建类或者函数的过程叫做实例化
vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector
vector<int> v1(10) 10个元素,每个都是0
vector<int> v2{10} 1个元素,值为10
vector<10,1>:10个元素,每个元素都是1
vector{10,1}:两个元素,1和10
vector<string> v6("hi") 错误!
vector中添加元素 用push_back()
循环体内部包含向vector对象添加元素的语句,则不能使用范围for循环
范围for语句体内不应改变其所遍历序列的大小
下标的类型还是size_type类型 两个整数相除,结果还是整数。余数部分会被自动忽略。
迭代器:
vector<int>::const_iterator 只能读不能写元素
vector<int>::iterator 能读写元素
for(vector<string>::iterator it=svec.begin();it!=svec.end;it++)
for(vector<string>::size_type ix=0;ix=svec.size();++i)
difference_type:只要两个迭代器指向同一个容器中的元素或者尾元素的下一个元素,就能将其相减,其所得结果是两个迭代器的距离。即右侧的迭代器向前移动多少个位置能追上左侧的迭代器。
定义数组时必须指明类型,不能用auto,另外和vector一样,数组的元素应该为对象,所以不存在引用的数组。
数组的下标类型:size_t 在头文件cstddef中
大多数情况下,使用数组类型的对象其实是使用一个指向该数组首元素的指针。
string nun[]={"onr","two"};
string *p2=num;//即string *p2=&num[0];
C++11中使用了Begin和end,
int ia[]={0,1,2,3,4,5,6,7,8,9};
int *beg=begin(ia);//指向首元素的指针
int *last=end(ia);//指向尾元素的下一个位置的指针
和迭代器一样,两个指针相减的结果的类型是ptrdiff_t的标准库类型,定义在cstddef的头文件中,
两个指针可以进行比较,只要他们是指向同一个数组的元素或者指向该数组的尾元素的下一个位置。
#include<string>
string test1; //空串
string test2 = "内容"; //使用=
string test3("内容"); //使用引用字符数组作为参数传给构造函数
string test4(test2); //用一个string初始化另一而string
string test5(test2,pos,num); //从test2中的第pos个位置开始,拷贝个数为num个字符
string test6 = test2 + "内容" + test3 //混合初始化
string test7 = test2.substr(pos,num); //从test2中的第pos个位置开始,拷贝个数为num个字符
string test8 = test2.substr(); //参数列表为空则会拷贝test2的整个对象(复制test2的简便方法)
string test9(num,ch); //拷贝num个字符型ch到test9
直接初始化:不使用等号
拷贝初始化:使用等号
当初始化的值有多个的时候,只能使用直接初始化的方式。
getline(is,s):从is中读取一行到s中
s.empty()
s.size()
string 对象会自动忽略开头的空白,并从第一个真正的字符开始读取,直到遇见下一处空白为止。
”Hello World “ 则 ”Hello“
cin两个,则输入” Hello world “ 输出: HelloWorld
getline(cin,line):(输入流,string对象)
while(cin>>world) string 忽略开头的空白,直到遇到下一个空白为止。
while(getline(cin,line)) 保留遇到的空白符,直到遇到换行符为止
string 的size类型:size_type 一个无符号的值,并且能够存下任何string对象的大小。
两个string对象相加;
字面值和string对象相加:必须确保每个+号两侧的运算对象至少有一个是string类型的
范围for:
for(declaration:expression)
l例子:
string s("Hello World");
for(auto &c:s)
c=toupper(c);
cout<<s<<endl;
访问string对象的单个字符:
(1)使用下标(2)使用迭代器
标准库类型:vector 容器
定义一个类就相当于创建了 一个新的class类型。要使用类,还必须用已经定义的类去说明它的实例变量(即对象)。在C++中,class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。
类模板+函数模板
vector是一个类模板
模板本身不是类或者函数,根据模板创建类或者函数的过程叫做实例化
vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector
vector<int> v1(10) 10个元素,每个都是0
vector<int> v2{10} 1个元素,值为10
vector<10,1>:10个元素,每个元素都是1
vector{10,1}:两个元素,1和10
vector<string> v6("hi") 错误!
vector中添加元素 用push_back()
循环体内部包含向vector对象添加元素的语句,则不能使用范围for循环
范围for语句体内不应改变其所遍历序列的大小
下标的类型还是size_type类型 两个整数相除,结果还是整数。余数部分会被自动忽略。
迭代器:
vector<int>::const_iterator 只能读不能写元素
vector<int>::iterator 能读写元素
for(vector<string>::iterator it=svec.begin();it!=svec.end;it++)
for(vector<string>::size_type ix=0;ix=svec.size();++i)
difference_type:只要两个迭代器指向同一个容器中的元素或者尾元素的下一个元素,就能将其相减,其所得结果是两个迭代器的距离。即右侧的迭代器向前移动多少个位置能追上左侧的迭代器。
定义数组时必须指明类型,不能用auto,另外和vector一样,数组的元素应该为对象,所以不存在引用的数组。
数组的下标类型:size_t 在头文件cstddef中
大多数情况下,使用数组类型的对象其实是使用一个指向该数组首元素的指针。
string nun[]={"onr","two"};
string *p2=num;//即string *p2=&num[0];
C++11中使用了Begin和end,
int ia[]={0,1,2,3,4,5,6,7,8,9};
int *beg=begin(ia);//指向首元素的指针
int *last=end(ia);//指向尾元素的下一个位置的指针
和迭代器一样,两个指针相减的结果的类型是ptrdiff_t的标准库类型,定义在cstddef的头文件中,
两个指针可以进行比较,只要他们是指向同一个数组的元素或者指向该数组的尾元素的下一个位置。
相关文章推荐
- C++和java多态的区别
- chapter10test8
- C++中 #ifdef 和#endif的作用
- 浅谈c++多态性
- hash算法在查找、比较中的应用
- 数字在排序数组中出现的次数
- 黑马程序员——C语言基础——文件读写实战
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- C++预处理命令
- C++类与对象详解
- 纪念逝去的岁月——C++实现一个队列(使用类模板)
- VC++中debug跟release编译模式的区别总结
- 【c++类的构造函数具体解释 】
- VC++某些笔记
- IOS之C语言打印直方图
- C语言中关于文件操作的一些用法
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- Remove Linked List Elements
- 【C语言/算法之 01 背包】完全背包
- 【学习笔记】【C语言】sizeof