事实证明,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()应该是等价的,至于本质的错误原因,水平有限,不得而知。
阅读(1988) | 评论(0) | 转发(0) |