Chinaunix首页 | 论坛 | 博客
  • 博客访问: 501758
  • 博文数量: 174
  • 博客积分: 8001
  • 博客等级: 中将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 19:30
文章分类

全部博文(174)

文章存档

2011年(1)

2010年(24)

2009年(149)

我的朋友

分类: C/C++

2009-03-11 17:42:55

事实证明,VC的STL实现欠缺稳健,gcc采用的sgi STL要强健的多。

#include <iostream>
using std::cout;
using std::endl;

#include <sstream>
using std::ostringstream;

#include <iomanip>
using std::setw;


#include <string>
using std::string;

int main()
{
    short bound=0, middle=0;
    string::const_reverse_iterator i;
    ostringstream oss;
    string str="abcdefghijklmnopqrstuvwxyz|";
    while(middle<27)
    {
        oss<<setw(14)<<str.substr(bound, middle+1-bound);
        cout<<oss.str();
        for(i=oss.str().rbegin()+1;i!=oss.str().rend();i++)
        {
            cout<<*i;
        }
        cout<<endl;
        bound++;
        middle+=2;
        oss.seekp(0);
    }
}


以上的代码在VC中将会有运行时错误提示:string iterator incomplete,而gcc则可以正确执行。经过调试,是oss.str()在作为迭代器的容器时产生的错误,如果用temp=oss.str()代替则可以在VC下通过。
这说明了VC的STL实现有缺陷,因为temp和oss.str()应该是等价的,至于本质的错误原因,水平有限,不得而知。
阅读(1920) | 评论(0) | 转发(0) |
0

上一篇:sgi STL 摘录

下一篇:C和C++的分别

给主人留下些什么吧!~~