C++程序设计(第18章)

                     第18章  标准模块库

前提

C++较之C语言强大的功能之一是,C++编译器自带了大量的可复用代码库,我们称为标准模板库(STL)。标准模板库是一套常用的数据结构的集合,包括链表和一些基于二叉树的数据结构。

18.1 vector,大小可变的数组

(1)在STL中有一个称为vector的数据结构,可以用来代替数组。vector跟数组非常相似,只不过vector的大小可以自动调整不需要编程人员关心内存分配和已存在元素的移动等细节问题。
(2)声明

#include<vector>
using namespace std;
vector<int> a_vector(10);

首先,你需要包含**(include)头文件vector**,以便能随时使用vector数据结构。你还需要使用命名空间(namespace)std,因为vector跟cin和cout类似,都是标准库的一部分。
其次,当你声明一个vector时,必须在尖括号中标识出想要在vector中存储的数据类型
最后,vector的大小放在圆括号中,而不是方括号。

一旦构建好了自己的vector,你便能用和访问数组的同样方式来访问vector中的每个元素了:

for(int i=0;i<10;i++)
{
  a_vector[i]=0;
  an_array[i]=0;
} 

18.1.1 vector的方法调用

(1)vector提供了执行这些操作的函数。vector利用了C++的一个特性:叫做方法,它是一个随着变量类型(在此例中,这个变量类型为vector)一起声明的函数。调用一个方法要使用新的语法,如下:
a_vector.size(); =size(a_vector);
这段代码调用了a_vector的方法size,返回该vector的大小。这有点像访问一个结构体的域,所不同的是,你访问的表示域,而是该结构的方法。这个特殊的语法是进行这种函数调用的唯一方式

18.1.2 vector的其他功能

(1)vector可以很容易地增加它所存储的值的数目,无需做任何烦琐的内存分配操作。例子,你若想添加更多的元素到vector中,可以这样写:
a_vector.push_back(10);
这个语句增加一个新元素到vector中。具体来说,它指的是:“添加元素10到当前vector的末尾”。vector本身会处理所有的调整大小操作。要是在数组中做这件事,你就必须分配新内存,将所有的值复制过去,最后再添加上你的新元素。当然,vector内部也要分配内存和复制元素,但它会选择一种聪明的大小分配方式,使得如果你不断地添加新元素的话,vector不会每次都重新调整内存大小。
(2)方括号只能用来处理已经分配的内存。

18.2 map

(1)map类型,允许指定键(key)和值(value)的类型。
例如:一个用来保存简单的电子邮件地址簿的数据结构。

#include<map>
#include<string>
using namespace std;
map<string,string> name_to_email;


这里,我们需要告诉map数据结构两个不同的类型:第一个类型string,指的是键的类型;第二个类型也是string,值的是值的类型,本例中指邮箱地址

(1)STL的map有一个很大的特点是,你可以使用跟数组相同的语法,来真正的使用map。
(2)因此你可以在vector上使用clear,empty和size方法,跟在map上使用的方式一样。

18.3 迭代器

void displayMap(map<string,string> map_to_print)
{
   for(map<string,string>::iterator itr=map_to_print.begin(),end=map_to_print.end();itr!=end; ++itr)
   {
    cout<<itr->first<<" --> " << itr->second << endl;
   }   
}

18.4 盘点 STL

(1)vector=数组
(2)map=二叉树

18.5 进一步学习 STL

资源:SGI网站:http://www.sgi.com/tech/stl/.
http://en.cppreference.com/w/cpp.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值