浅谈C++容器(一)

在面向对象的语言中,大多引入了容器的概念。那么 什么 是 容器?实质上就是一组相同类型对象的集合,但是它又不仅仅像数组那样简单,它实现了比数组更复杂的数据结构,当然也实现了比数组更强大的功能。C++ 标准模板库里提供了10 种通用的容器类,它基本上可以解决程序中遇到的大多数问题。   

现在我主要来说明这10 种通用容器的功能用途以及相互之间的相同与异同。但是在这里,我不提倡一开始就着手从这10 种容器开始,因为这样恐怕在随后的理解上产生很多困难。在此之前了解一下数据结构的基本概念是很有必要的,因为容器的概念是基于数据结构的基本知识,实际上这些容器就是对数据结构提炼的产物,或者说每一个容器就是对某一种数据结构的实例化。容器是由数据结构而来,如果不了解数据结构就很难理解容器的本质。

数据结构的概念提出于上世纪80 年代,它是随着程序语言结构化设计的诞生而兴起。数据结构主要包含两块内容:数据结构和算法。曾经在计算机界有这样一个公式:数据结构+ 算法= 程序,这种思想对程序设计产生着深刻的影响,即使是现在依旧是计算机程序设计的基础,可见它的重要性。随着面向对象程序设计的发展数据结构也在进一步的发展和变化,它在未来也是程序设计不可或缺的基础之一。数据结构如此之重要,但是它的内容太过于复杂庞大,在这里就C++ 通用容器所用到的基础数据结构知识作以简单介绍。

计算机运行实质上就是在处理一些数据。这些数据对计算机来说不是杂乱无章的,而是有内在的联系,这种联系也许对人类思维来说不是一目了然的,但计算机能清楚的认识到。正是这种联系,大量的复杂的数据才能得到合理的组织和有效的处理。数据结构就是研究这些数据以及它们之间的联系,还有在这种联系下对数据的操作。

在数据结构里对数据的研究主要从三个方面着手 

l  数据的逻辑结构

l  数据的存储结构

l  数据的操作

数据元素之间的相互联系方式称为数据的逻辑结构 。数据的逻辑结构是对数据元素之间逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系来表示。数据的逻辑结构经常被简称为数据结构。

按照数据的逻辑结构来分,有两种形式:线性结构和非线性结构。线性结构是指 除第一个和最后一个数据元素外,每个数据元素有且只有一个前驱元素和一个后继元素,而非线性数据结构则会有零个或多个前驱元素和零个或多个后继元素。

数据元素在计算机中的存储表示方式称为数据的存储结构 ,也称物理结构。任何需要计算机进行管理和处理的数据元素都必须首先按某种方式存储在计算机中,数据存储结构能正确地表示出数据元素间的逻辑关系。

按照数据的存储结构来分,有两种类型:顺序存储结构和链式存储结构。顺序存储结构是把数据元素存储在一块连续地址空间的内存中,其特点是逻辑上相邻的数据元素在物理上(即内存存储位置上)也相邻,数据间的逻辑关系表现在数据元素的存储位置关系上。链式存储结构的关键是使用节点,节点是由数据元素域与指针域组合的一个整体,指针将相互关联的节点衔接起来。其特点是逻辑上相邻的元素在物理上不一定相邻,数据间的逻辑关系表现在节点的衔接关系上。

数据的逻辑结构是从逻辑关系角度观察数据,它与数据的存储无关,是独立于计算机的。而数据的存储结构是逻辑结构在计算机内存中的实现,它是计算机处理的逻辑。

数据操作是指对一种数据类型的数据元素进行的某种处理 。数据的操作是定义在数据的逻辑结构上的,每种逻辑结构都有一个操作的集合,不同的逻辑结构有不同的操作。操作的具体实现与存储结构有关。对于常用的数据结构的操作主要包括以下几种:访问元素、统计元素个数、更新元素、插入元素、删除元素、查找元素以及排序元素等。 来自:blog.csdn.net/acosoft

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值