STL面前的设计准则-容器和算法的设计哲学分析-迭代器
本文深化讨论了C++规范模板库(STL)面前的设计准则,包括泛型编程、迭代器形式、容器和算法的设计哲学。经过代码示例和文字解释,咱们提醒了STL如何成功高效、灵敏和可裁减的代码,成为C++程序员无法或缺的工具。
一、引言
C++规范模板库(STL)是一套配置弱小的泛型编程工具,为程序员提供了丰盛的容器、算法和迭代器。STL的设计准则表现了软件工程的最佳通常,使得代码愈加高效、灵敏和可保养。本文将深化讨论STL面前的设计准则,协助读者更好地理解和运用这个库。
二、泛型编程
泛型编程是一种编程范式,它并重于编写独立于特定数据类型的代码。STL宽泛运用了泛型编程的思维,经过模板来成功类型有关性。这使得STL的容器和算法可以处置各种数据类型,提高了代码的重用性和灵敏性。
例如,上方的代码展现了如何经常使用STL的vector容器存储整数:
#include<vector>#include<tream>intmn(){std::vector<int>v={1,2,3,4,5};for(inti:v){std::cout<<i<<"";}std::cout<<std::endl;return0;}
在这个例子中,vector是一个模板类,可以存储恣意类型的数据。咱们经过指定模板参数int来实例化一个整数类型的vector。这种泛型编程的方法使得咱们可以轻松地更改存储的数据类型,而无需修正容器的成功。
三、迭代器形式
迭代器形式是STL的外围设计准则之一,它提供了一种访问容器中元素的规范方法。迭代器封装了容器的外部示意,使得算法可以独立于容器的详细成功。这种分别成功了算法和容器的解耦,提高了代码的可重用性和可保养性。
上方的代码展现了如何经常使用迭代器遍历vector容器中的元素:
#include<vector>#include<iostream>intmain(){std::vector<int>v={1,2,3,4,5};for(std::vector<int>::iteratorit=v.begin();it!=v.end();++it){std::cout<<*it<<"";}std::cout<<std::endl;return0;}
在这个例子中,咱们经常使用了vector的begin()和end()函数来失掉迭代器的起始和完结位置。经过迭代器it,咱们可以顺序访问容器中的每个元素。这种迭代器形式的设计使得咱们可以轻松地将算法运行于不同的容器,提高了代码的可重用性。
四、容器和算法的设计哲学
STL的容器和算法遵照了一种设计哲学,即不要为你不须要的物品付出代价。这象征着STL的组件都是尽或者轻量级的,只提供必要的配置,防止不用要的开支。同时,STL也提供了丰盛的裁减性,准许程序员依据须要自定义容器和算法。这种平衡使得STL既高效又灵敏,顺应了各种运行场景的需求。
五、论断
本文经过深化讨论了STL面前的设计准则,包括泛型编程、迭代器形式、容器和算法的设计哲学。这些准则表现了软件工程的最佳通常,使得代码愈加高效、灵敏和可保养。经过了解这些准则并运用它们编写代码,程序员可以更好地利用STL的配置,提高开发效率并缩小失误。
C++迭代器的用法
1、迭代器是一种对象,它能够用来遍历STL容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上象迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。
![STL](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
2、迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。不同之处在于,迭代器是个所谓的smart pointers,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型别都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型别却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。
3、例程:
1
C++ 的STL中,迭代器那个指针为何++能指向下一个元素?这个是迭代器的特征,list通过实现迭代器从而可以实现迭代concept。 具体请参考《Generic programming and the STL》一书(第一篇的第一章),STL作为一个基本完备的数据操作集,其设计理念和依据都非常抽象,想要理解有一定的难度,而且单单拿出一个组件是无法明白它单独所具有的意义的,因此要系统的学习。 但是如果你只要求会用即可的话,那么你可以把他当做语言规范或者特性记下来,迭代器在行为上就是模仿指针,但是结构上是在模仿线性表的访问方式。 |
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。