C++ STL的不同实现版本

1、HP STL

        HP STL是所有其它STL实现版本的根源。它是STL之父Alexander Stepanov在惠普的Palo Alto实验室工作时,和Meng Lee共同完成的,是第一个STL的实现版本(参见1.2节)。这个STL是开放源码的,所以它允许任何人免费使用、复制、修改、发布和销售该软件和相关文档,前提是必须在所有相关文件中加入HP STL的版本信息和授权信息。现在已经很少直接使用这个版本的STL了。


2、  P. J. Plauger STL

     P. J. Plauger STL属于个人作品,由P. J. Plauger本人实现,是HP STL的一个继承版本,因此在其所有头文件中都含有HP STL的相关声明,同时还有P. J. Plauger本人的版权声明。P. J. Plauger是标准C中stdio库的早期实现者,现在是C/C++ User's Journal的主编,与Microsoft保持着良好的关系。P. J. Plauger STL便是被用于Microsoft的Visual C++中的。在Windows平台下的同类版本中,其性能不错,但是queue组件(队列,一种容器)的效率不理想,同时由于Visual C++对C++语言标准的支持不是很好(至少直到VC6.0为止,还是如此),因此一定程度上影响了P. J. Plauger STL的性能。此外,该版本的源代码可读性较差,你可以在VC的Include子目录下找到所有源文件(比如:C:/Program Files/Microsoft Visual Studio/VC98/Include)。因为不是开放源码的(open source),所以这些源代码是不能修改和销售的,目前P.J. Plauger STL由Dinkumware公司提供相关服务,详情请见http://www.dinkumware.com。据称Visual Studio.NET中的Visual C++.NET(即VC7.0),对C++标准的支持有所提高,并且多了以哈希表(hash table)为基础而实现的map容器,multimap容器和set容器。


3、Rouge Wave STL

    Rouge Wave STL是由Rouge Wave公司实现的,也是HP STL的一个继承版本,除了HP STL的相关声明之外,还有Rouge Wave公司的版权声明。同时,它也不是开放源码的,因此无法修改和销售。该版本被Borland C++ Builder所采用,你可以在C++ Builder的Include子目录下找到所有头文件(比如:C:/Program Files/Borland/Cbuilder5/Include)。尽管Rouge Wave STL的性能不是很好,但由于C++ Builder对C++语言标准的支持还算不错,使其表现在一定程度上得以改善。此外,其源代码的可读性较好。可以从如下网站得到更详细的情况介绍:http://www.rougewave.com。遗憾的是该版本已有一段时间没有更新且不完全符合标准。因此在Borland C++ Builder 6.0中,它的地位被另一个STL的实现版本--STLport(见后)取代了。但是考虑到与以前版本的兼容,C++ Builder 6.0还是保留了Rouge Wave STL,只是如果你想查看它的源代码的话,需要在别的目录中才能找到(比如:C:/Program Files/Borland/Cbuilder6/Include/oldstl)。


4、STLport

       STLport最初源于俄国人Boris Fomitchev的一个开发项目,主要用于将SGI STL的基本代码移植到其他诸如C++Builder或者是Visual C++这样的主流编译器上。因为SGI STL属于开放源码,所以STLport才有权这样做。目前STLport的最新版本是4.5。可以从如下网站得到更详细的情况介绍:http://www.stlport.org,可以免费下载其源代码。STLport已经被C/C++技术委员会接受成为工业标准,且在许多平台上都支持。根据测试STLport的效率比VC中的STL要快。比Rouge Wave STL更符合标准,也更容易移植。Borland C++ Builder已经在其6.0版中加入了对STLport的支持,它使用的STLport就是4.5版的,C++ Builder 6.0同时还提供了STLport的使用说明。你可以在C++ Builder的Include/Stlport子目录下找到所有头文件(比如:C:/Program Files/Borland/Cbuilder6/Include/Stlport)。


5、SGI STL

      SGI STL是由Silicon Graphics Computer System, Inc公司实现的,其设计者和编写者包括Alexander Stepanov和Matt Austern,同样它也是HP STL的一个继承版本。它属于开放源码,因此你可以修改和销售它。SGI STL被GCC(linux下的C++编译器)所采用,你可以在GCC的Include子目录下找到所有头文件(比如:C:/cygnus/cygwin-b20/include/g++/include)。由于GCC对C++语言标准的支持很好,SGI STL在linux平台上的性能相当出色。此外,其源代码的可读性也很好。可以从如下网站得到更详细的情况介绍:http://www.sgi.com,可以免费下载其源代码。目前的最新版本是3.3。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STL中的栈是通过标准库中的`<stack>`头文件实现的。在C++中,栈被定义为`stack<Type>`,其中`Type`是栈中存储的元素的类型。 栈的主要操作有: - `push(a)`:将元素`a`推入栈顶。 - `pop()`:删除栈顶的元素,但不会返回被删除的元素。 - `top()`:返回栈顶的元素,但不会删除栈顶元素。 - `size()`:返回栈中元素的个数。 - `empty()`:检查栈是否为空,如果为空返回`true`,否则返回`false`。 在C++ STL中,栈的实现使用了容器适配器的概念。基于栈的默认实现,它使用了`deque`(双端队列)作为其底层容器,但也可以选择使用`vector`或`list`作为底层容器。这意味着栈提供了一种在底层容器上进行堆栈操作的统一接口,无论使用哪种容器作为底层实现。 对于自定义的栈实现,您可以参考以下示例代码: ``` #include <iostream> #include <stack> using namespace std; class My_stack { private: stack<int> data; public: void push(int x) { data.push(x); } int pop() { int x = data.top(); data.pop(); return x; } int top() { return data.top(); } bool empty() { return data.empty(); } }; int main() { My_stack s; s.push(1); s.push(2); s.push(3); cout << "Top element: " << s.top() << endl; // 输出栈顶元素 cout << "Pop element: " << s.pop() << endl; // 输出弹出的元素 cout << "Is stack empty? " << (s.empty() ? "Yes" : "No") << endl; // 检查栈是否为空 return 0; } ``` 以上是关于C++ STL栈的实现和用法的介绍。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值