2021-02-04

​ 除了第2章介绍的内置类型之外,C++语言还定义了一个内容丰富的抽象数据类型库。其中,string和vector是两种最重要的标准库类型,前者支持可变长字符串,后者则表示可变长的集合。还有-一种标准库类型是迭代器,它是string和vector的配套类型,常被用于访问stringg中的字符或vector中的元素。

​ 内置数组是一种更 基础的类型,string 和vector都是对它的某种抽象。本章将分别介绍数组以及标准库类型string和vector.

​ 第2章介绍的内置类型是由C++语言直接定义的。这些类型,比如数字和字符,体现了大多数计算机硬件本身具备的能力。标准库定义了另外组具有更高级性质的类型, 它们尚未直接实现到计算机硬件中。

​ 本章将介绍两种最重要的标准库类型: string 和vector。string 表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列。本章还将介绍内置数组类型,和其他内置类型一样, 数组的实现与硬件密切相关。因此相较于标准库类型string和vector,数组在灵活性上稍显不足。

​ 在开始介绍标准库类型之前,先来学习一种访问库中 名字的简单方法。

3.1命名空间的using声明

​ 就像我们前面所学的,我们所用到的库函数基本都属于命名空间std的,每次使用时都要声明(std::),十分的麻烦,而使用using声明可以很轻松的解决这个问题,格式为:

using namespace::name

​ 放在全局作用域中,之后就可以直接访问

#include <iostream>

// using声明,当我们使用名字cin时,从命名空间std中获取它using std: :cin;

int main ( )

{

​	int i;

​	cin >> i;

​	//正确:cin和std: :cin含义相同

​	cout<<i;

​	//错误:没有对应的using声明,必须使用完整的名字

​	std: :cout << i; //正确:显式地从std中使用cout

​	return 0;

}

​ 你每想使用一个名字都必须进行声明,而且using声明之后只能跟一个名字,就是想一行多声明,也必须声明一个之后用分号隔开

头文件不应包含using声明

3.2 标准库类型string

​ 相较于c语言,c++居然可以直接定义字符串类型,标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件,接下来的所以代码块中都将包含

#include<string>

using std::string;

​ 除了本章要介绍的string的操作以外,9.5节也将介绍一部分

3.2.1 定义和初始化string对象

​ 初始化string的方式

string sl	//默认初始化,s1是一个空串

string s2 (s1 )	//s2是s1的副本

string s2 = s1	//等价于s2(s1),s2是s1的副本

string s3 ("value")	//s3是字面值"value"的副本,除了字面值最后的那个空字符外

string s3 = "value"	//等价于s3 ("value"),s3是字面值"value"的副本

string s4 (n, 'c')	//把s4初始化为由连续n个字符C组成的串

直接初始化和拷贝初始化

​ 拷贝初始化利用的是“=”号,相当于将等号右边的值拷贝给左边,而不利用等号,利用的是括号的是直接初始化

​ 当初始值只有一个时, 使用直接初始化或拷贝初始化都行。如果像上面的s4那祥初始化要用到的值有多个,一 般来说只能使用直接初始化的方式:

string s5 = "hiya";//拷贝初始化

string s6("hiya") ;//直接初始化

string s7(10,'c') ;//直接初始化,s7的内容是cccccccccc

​ 对于用多个值进行初始化的情况,非要用拷贝初始化的方式来处理也不是不可以,不过需要显式地创建一个 (临时) 对象用于拷贝:

string s8 = string(10, 'c'); // 拷贝初始化,s8的内容是 cccccccccc

​ s8的初始值是string(10, ‘c’ ),, 它实际上是用数字10和字符c两个参数创建出来的个string对象,然后这个string对象又拷贝给了s8.这条语句本质上等价于下面的两条语句:

string temp(10, 'c') ;// temp 的内容是cccccecccc

string s8 = temp;//将temp拷贝给s8

3.2.2 string对象上的操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值