【Primer C++】第三章:字符串、容器

string

getline函数

getline函数的参数是一个输入流和一个string对象,函数从输入流中读入内容,直到遇到换行符为止(换行符也被读入),但是string对象中却不包含换行符

string::size_type

对于stringsize函数来说,返回的是一个string::size_type类型的值;

字面值与string对象相加

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

string s4 = s1 + ", ";
string s5 = "hello" + ", "; // 错误,两个运算对象都不是string
string s6 = s1 + ", " + "world";
string s7 = "hello" + ", " + s2;

处理string对象中的字符

改变某个字符的特性,在cctype头文件中定义:

isalnum(c),isalpha(c),isdigit(c)...

容器

标准库类型vector

需要注意的是,在早期版本的C++标准中,如果vector的元素还是vector(或者其他模板类型),则应该写成:

vector<vector<int> >而非vector<vector<int>>	// 注意区别为空格

vector的列表初始值还是元素数量区别,根据()或者{}判断:

vector<int> v1(10)	// 10个元素
vector<int> v1{10}	// 一个元素,值为0

针对于{}初始化的形式,如果提供的值不能用来列表初始化,此时就要考虑用这样的值来构造vector对象了。

vector<string> strVec{10};	// 此时是创建了拥有10个元素的值初始化的vector
vector<string> strVec{10, "hi"}	// 此时创建了包含有10个“hi”的vector
vector<string> strVec(10, "hi")	// 同上

vector<string> strVec("hi")		// 报错,为甚麽这个不能解释为含有一个“hi”的vector,理解应该是“()”中
								// 有1个元素的时候,已经明确规定是表示的大小,必须为正整数

创建vector对象时,往往是创建一个空的vector,然后通过push_back方法向里面追加元素。

迭代器

.begin().end()

标准库函数begin()end()

这两个函数包含在头文件iterator中,

获得数组的头指针和尾后指针,将数组作为参数传入:

int ia[] = {1,2,3,4,5,6}
int *beg = begin(ia);
int *last = end(ia);

C风格的字符串

C风格的字符串需要以’\0’结尾,与此相关的库函数包含在头文件string.h中,但都要求传入的字符串需要以‘\0’结尾,才能正常工作。

允许使用以空字符结尾的字符数组来初始化string对象或为string对象赋值;在string 对象的加法运算中,允许使用以空字符结束的字符数组作为其中一个运算对象(但是不能两个都是)。

很多c++程序在标准库出现之前就已经写成了,因此肯定没有用到string和vector类型,因此c++为了与旧代码进行衔接,专门提供了一组功能:混用string和c风格的字符串。

在以string作为参数的方法中可以传入c风格的字符串,反之则不可以将string传给以c风格字符串作为参数的方法。

作为补充,c++提供了将string转换为c风格字符串的方法:c_str(),返回的则是一个指向数组的指针,因此考虑如下的代码:

string s = "hello";
const char *pch = s.c_str();
s = "world";

此时pch则是指向字符串“world”的指针
若想一直使用执行完c_str()返回的数组,最好执行拷贝
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值