C++ primer第三章笔记

一、标准库string

表示可变长的字符序列
1、string对象的初始化
在这里插入图片描述
使用等号是拷贝初始化,不使用等号是直接初始化

2、string对象操作
在这里插入图片描述
(1)读写操作:
iostream读string对象时,会自动忽略前面的空白,从第一个字符开始读起,直到遇见下一处空白;
读入一整行可以用getline,不会忽略中间的空格。
(2)size:
size返回的是size_type类型,是一个无符号类型。
(3)比较运算符:
如果两个string对象某些位置不一样,则比较的是第一对相异字符的字典序

3、处理字符
(1)遍历string中的每个字符:

string word("123456");
    for(auto i : word){
        cout << i << " " ;
    }

(2)改变string中的字符:必须把循环变量定义成引用类型

 string word("123456");
    for(auto &i : word){
        i = '1';
        cout << i << " " ;
    }

4、string与C风格字符串的转化:
(1)可以用char*初始化string

 char*s1 = "1212121";
 string s2 = s1;

(2)不能用string初始化char*,需要使用cstr成员函数,因为返回的对象是指针类型,因此必须初始化常量

 const char*s1 ;
 string s2 = "1212121";
 s1 = s2.c_str(); //s1必须是常量

二、标准库Vector

1、定义初始化Vector
在这里插入图片描述
列表初始化:用花括号括起的0个或多个元素被赋给vector对象
如果花括号括起来的不能用来初始化,则尝试默认初始化

vector<string> ar = {"1","2","3"}; //必须使用花括号

值初始化:使用圆括号

vector<int> v1(10); //v1包含10个元素,每个元素都是0
vector<int> v2(10,1); //v2包含10个元素,每个元素都是1

2、向vector中添加元素
可以在运行时用成员函数push_back向vector中添加元素,定义vector对象时设定其大小没有什么意义。

三、迭代器

1、begin和end
如果容器为空,则begin和end返回的是同一个迭代器,因此可以用begin和end返回的是否是同一个结果来检查容器是否为空

if(s.begin!=s.end) //检验容器是否为空

begin和end返回的具体类型由对象是否是常量决定,如果是常量,返回const_iterator;如果不是常量,返回iterator。
C++ 11提供了cbegin和cend用来专门返回常量。

2、解引用迭代器
如果解引用的对象是个类,若想通过解引用访问类内成员需要加上圆括号

(*it).item;
it->item; //箭头可以简化写法

3、vector对象操作可能使迭代器失效

4、迭代器运算
(1)迭代器加上或减去一个数仍然是迭代器
(2)两个迭代器相减得到的是二者的距离
(3)关系运算符>,<等,根据位置前后进行比较,比较的两个迭代器必须指向同一个容器中的元素,类型是different_type,带符号整型数

四、数组

1、数组名和指针的关系
编译器一般会把数组名等效为指针,但是在某些情况下不成立P162:
(1)使用数组名作为decltype的表达式,返回的类型是数组 ;而auto则是指针
(2)a是数组名,sizeof(a)
(3)a是数组名,&a是int (*)[4]类型,即指向含有四个整型量的数组的指针

2、begin和end
C++ 11新标准,可以用begin和end返回数组首元素和尾元素的下一位置

 int a[]  = {1,2,3,4};
 auto m = begin(a);

3、用数组来初始化vector
vector不能用来初始化数组,但数组可以用来初始化vector

 char s1[] = "1212121";
 vector<char> s3 (begin(s1),end(s1));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值