首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows Visual Studio 8.0中使用SGI Ropes?

如何在Windows Visual Studio 8.0中使用SGI Ropes?
EN

Stack Overflow用户
提问于 2011-05-21 02:35:04
回答 1查看 675关注 0票数 0

下午好,我们正在构建一个在Windows和Linux上使用C++的重复数据删除程序的原型。昨天,我们在堆栈溢出上发布了一个关于如何避免STL string深度复制的问题,当我们在std::string* StringArray中存储要去重的记录的std::string版本时,STL会制作string的深度副本,并且malloc会创建至少160,000,000字节的新缓冲区。我们很快就用完了堆内存,并得到了一个std::bad_alloc异常

Stack Overflow专家回答了问题,建议使用更好的string类,例如SGI的Ropes,因为Ropes特别适合处理非常大的字符串。因此,我们下载了SGI的ropes.c和rope.h的一个版本。但是,我们无法在Windows Visual Studio 2008上编译ropes.c和ropes.h。此外,我们也找不到任何如何使用SGI C++ Ropes接口的示例。

所以我们下载了Paul Hsieh的一个更好的字符串库。我们修改了我们的STL源代码,以使用在更好的String Libary中实现的bstring类。下面是我们代码的摘录:

代码语言:javascript
复制
std::vector< bstring > BStringVector;

bstring b = bfromcstr(curr.getPtr());
char* const resultptr = (curr.getPtr() + n);
resultptr[STRING_SIZE] = '\x0';

BStringVector.push_back(b);
curr.mPtr = (char*)bstr2cstr(BStringVector.back(),' ');

std::multiset<Range>::iterator miter = ranges_type.lower_bound(Range(n));
(*miter).mPtr = curr.mPtr;

free (b);
return (char*)(resultptr); 

与STL string类相比,这个新代码生成的std::bad_alloc异常更少,但我们知道Ropes是处理非常大的字符串的最佳类。所以我们需要知道如何在Windows Visual Studio2008上使用SGI源代码。在Ropes代码中有很多SGI特定的头文件。对应的Windows Visual Studio2008 C++头文件是什么?

此外,在阅读了Ropes文档之后,我们对如何将C/C++ char*指针的以null结尾的内容转换为Ropes对象仍然没有90%的把握。此外,我们如何将push_back对象放到vector这样的STL容器上?最后,我们如何从STL vector容器中检索Ropes对象?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-21 02:46:18

您是否只下载了两个实现文件?我怀疑这是否会起作用,因为它们最有可能依赖于SGI STL实现中的其他文件。这就解释了为什么你不能建造它们..。

获得SGI实现的最简单方法可能是使用STLport,它是SGI STL到多个平台的移植和进一步开发。虽然我还没有尝试在VS2008中使用它,但我非常确定它是受支持的。

但是,您将需要使用STLport作为完整的STL替代(事实确实如此),而不是提取一个或两个类并尝试将其用于VS2008附带的STL实现。

也就是说,除非您想用MS STL重写rope类来开箱即用,但对我来说这听起来不是一个好主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6076225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档