C++Primer第5版读书笔记(第3章 字符串、向量和数组)

第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[n]			//返回s中第n个字符的引用,位置n从0计起
s1+s2			//返回s1和s2连接后的结果
s1=s2			
s1==s2			
s1!=s2			
<,<=,>,>=		
  1. 字面值和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不是常量表达式
  1. 定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型,另外和vector一样,数组的元素应为对象,因此不存在引用的数组
  2. 不能将数组的内容拷贝给其他数组作为其初始值。
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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值