《C++ Primer》--学习2

字符串,向量和数组

标准库类型 string

 直接拷贝和拷贝初始化

如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。如果不使用等号,则执行的是直接初始化

string s = (10,'c')    //直接初始化

string s = string(10,'c')    //拷贝初始化

string 对象上的操作

s.size() 返回的是一个string::size_type类型的无符号数,当使用这个值之后就不要使用有符号数了,混用 int 和 unsigned 可能带来问题

比较 string 对象 ,大小写敏感

 字面值和 string 对象相加

当把 string 对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是 string 

处理 string 对象中的字符

 处理每个字符?使用基于范围的for语句

标准库类型 vector

要想使用 vector ,必须包含适当的头文件   #include <vector>

 编译器根据模板创建类或函数的过程称为 实例化 

vector 能容纳绝大多数类型的对象作为元素,但是因为引用不是对象,所以不存在包含引用的vector

定义和初始化 vector 对象

如果使用的圆括号,可以说提供的值是用来构造 vector 对象的

如果使用的花括号,可以表达成我们想列表初始化该 vector 对象

向 vector 对象中添加元素

范围 for 语句体内不应改变其所遍历序列的大小

 其他 vector 操作

迭代器

使用迭代器

有迭代器的类型同时拥有返回迭代器的成员,比如,这些类型都拥有名为 begin 和 end  的成员

begin 成员负责指向第一个元素的迭代器,end 成员负责返回指向容器“尾元素的下一个位置的迭代器”,该迭代器指示的是容器的一个本不存在的“尾后”元素,这样的迭代器没什么实际含义,仅是个标记

如果容器为空,则 begin 和 end 返回的都是尾后迭代器,同一个迭代器

拥有迭代器的标注库类型使用 iteratorconst_iterator 来表示迭代器的类型

begin 和 end 运算符

如果对象是常量,就返回const_iterator,否则,返回 iterator

 迭代器运算

 数组

用字符串字面值初始化字符串数组时,字符串结尾处的空字符也会拷贝进去

a1维度是3,a2 a3的维度都是4,a4需要7个维度才能存放字面值“Daniel”

不允许拷贝和赋值

不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值

 由内向外理解,*Parray 意味着Parray是个指针,然后观察右边,可知道Parray是个指向大小为10的数组的指针,最后观察左边,知道数组中的元素是 int

 访问数组元素

在使用数组下标的时候,通常将其定义为 size_t 类型,是一种机器相关的无符号类型

指针和数组

string *p = &nums[0]    //p 指向 nums 的第一个元素

string *p2 = nums    //等价于 p2 = &nums[0]

 指针也是迭代器

 标准库函数 begin 和 end

指向数组的指针可以执行迭代器运算,这些运算,包括解引用,递增,比较,与整数相加,两个指针相减等,用在指针和用在迭代器上意义完全一致

使用数组初始化 vector 对象 

 多维数组

当程序使用多维数组的名字时,会自动将其转换成指向数组首元素的指针

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值