C++Primer第5版读书笔记(第3章)
2016-02-26 13:01
295 查看
第3章 字符串、向量和数组
3.1 命名空间的using声明
3.2.1 定义和初始化string对象
3.2.2 string对象上的操作
字面值和string对象相加必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。
3.2.3 处理string对象中的字符
1. 范围for语句
3.3.1 定义和初始化vector对象
3.4迭代器介绍
1. 迭代器类型iterator和const_iterator.
3.5 数组
定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型,另外和vector一样,数组的元素应为对象,因此不存在引用的数组
不能将数组的内容拷贝给其他数组作为其初始值。
3. 要想理解数组声明的含义,最好的办法是从数组的名字开始按照由内向外的顺序阅读。
3.6 多维数组
1. 要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。如果不采用引用的方式则会将row转换为指向该数组内部首元素的指针。
3.1 命名空间的using声明
using namespace::name
3.2.1 定义和初始化string对象
#include<string> using std::string; string s1; //默认初始化 string s2(s1); //直接初始化,s2为s1的副本 string s3=s1; //拷贝初始化,s3为s1的副本 string s4("value"); //直接初始化, string s5="value"; //拷贝初始化, string s6(n,'c'); //拷贝初始化,将s6初始化为有连续n个字符c组成的串
3.2.2 string对象上的操作
os<<s //将s写到输出流os中,返回os is>>s //从is中读取字符串付给s,返回s getline(is,s) //从is中读取一行赋给s,返回is s.empty() //s为空返回true,否则返回false s.size() //返回s中字符的个数,返回的值是string::size_type类型 s //返回s中第n个字符的引用,位置n从0计起 s1+s2 //返回s1和s2连接后的结果 s1=s2 s1==s2 s1!=s2 <,<=,>,>=
字面值和string对象相加必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。
string s2=s1+", "; //正确 string s3="hello"+","; //错误 string s4="hello"+", "+s2; //错误 string s5=s1+", "+"world"; //正确
3.2.3 处理string对象中的字符
1. 范围for语句
for(declaration:expression) statement //示例: string str("some string"); for(auto c : str) cout<<c<<endl;
2. 使用范围for语句如果想改变expression对象中的值,应把循环变量定义为引用类型。
3.3.1 定义和初始化vector对象
vector<string> v1{10}; //v1有10个默认初始化的元素 vector<string> v2{10,"hi"}; //v2有10个值为“hi”的元素
3.4迭代器介绍
1. 迭代器类型iterator和const_iterator.
vector<int>::iterator it; //it能读写vector<int>元素 string::iterator it2; //it2能读写string对象中的字符 vector<int>::const_iterator it3; //it3只能读 string::const_iterator it4; //it4只能读
2. begin和end运算符对应iterator,cbegin和cend对应const_iterator。
3.5 数组
unsigned cnt=42; string bad[cnt]; //错误:cnt不是常量表达式
定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型,另外和vector一样,数组的元素应为对象,因此不存在引用的数组
不能将数组的内容拷贝给其他数组作为其初始值。
int a[]={0,1,2}; int a1[]=a; //错误:不允许使用一个数组初始化另一个数组 a1=a; //错误:不能把一个数组直接赋值给另一个数组 int (*Parray)[10]=&arr; //Parray指向一个含有10个整数的数组 int (&arrRef)[10]=arr; //arrRef引用一个含有10个整数的数组 int *(&arry)[10]=ptrs; //arry是数组的引用,该数组含有10个指针 auto ia(a); //ia是一个指针,指向a的第一个元素 decltype(a) ia1 = {1,2,3}; //ia1是一个含有3个整数的数组
3. 要想理解数组声明的含义,最好的办法是从数组的名字开始按照由内向外的顺序阅读。
3.6 多维数组
1. 要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。如果不采用引用的方式则会将row转换为指向该数组内部首元素的指针。
for(const suto &row : ia) for(auto col : row) cout<<col<<endl;
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性