您的位置:首页 > 编程语言 > C语言/C++

C++Primer第5版读书笔记(第3章)

2016-02-26 13:01 295 查看
第3章 字符串、向量和数组

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++