如何在Windows Visual Studio 8.0中使用SGI Ropes? 下午好,我们正在用C++和Windows在Linux上构建一个重复删除程序的原型。昨天,我们发布了一个关于堆栈溢出的问题,关于当我们在std::string*StringArray中存储要重复的记录的std::string版本时,如何避免STLstring深度复制,STL制作string的深度复制,并且malloc是一个至少160000000字节的新缓冲区。我们很快就耗尽了堆内存,并得到一个std::bad_alloc异常
堆栈溢出专家回答了这个问题,他们建议使用更好的字符串类,如SGI的Ropes,因为Ropes特别适合处理非常大的字符串。所以我们下载了SGI的rope.c和rope.h的一个版本。但是,我们无法在Windows Visual Studio 2008上编译ropes.c和ropes.h。另外,我们找不到任何使用SGI C++的接口的例子。 所以我们下载了一个更好的字符串库。我们修改了STL源代码,以使用更好的字符串库中实现的如何在Windows Visual Studio 8.0中使用SGI Ropes? 下午好,我们正在用C++和Windows在Linux上构建一个重复删除程序的原型。昨天,我们发布了一个关于堆栈溢出的问题,关于当我们在std::string*StringArray中存储要重复的记录的std::string版本时,如何避免STLstring深度复制,STL制作string的深度复制,并且malloc是一个至少160000000字节的新缓冲区。我们很快就耗尽了堆内存,并得到一个std::bad_alloc异常,c++,windows,linux,string,stl,C++,Windows,Linux,String,Stl,堆栈溢出专家回答了这个问题,他们建议使用更好的字符串类,如SGI的Ropes,因为Ropes特别适合处理非常大的字符串。所以我们下载了SGI的rope.c和rope.h的一个版本。但是,我们无法在Windows Visual Studio 2008上编译ropes.c和ropes.h。另外,我们找不到任何使用SGI C++的接口的例子。 所以我们下载了一个更好的字符串库。我们修改了STL源代码,以使用更好的字符串库中实现的bstring类。以下是我们代码的摘录: std::vector<
bstring
类。以下是我们代码的摘录:
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);
std::vectorBStringVector;
b字符串b=bfromcstr(curr.getPtr());
char*const resultptr=(curr.getPtr()+n);
resultpttr[STRING_SIZE]='\x0';
b字符串向量。推回(b);
curr.mPtr=(char*)bstr2cstr(BStringVector.back(),“”);
std::multiset::迭代器miter=ranges_type.下限(Range(n));
(*miter.mPtr=curr.mPtr;
免费(b);
返回(char*)(resultptr);
与STLstring
类相比,这个新代码生成的std::bad_alloc
异常更少,但我们知道Ropes是处理非常大的字符串的最佳类。所以我们需要知道如何在WindowsVisualStudio2008上使用SGI源代码。Ropes代码中有许多特定于SGI的头文件。Windows Visual Studio 2008 C++头文件有哪些?
此外,在阅读了Ropes文档之后,对于如何将C/C++
char*
指针的以null结尾的内容转换为Ropes对象,我们仍然没有90%的把握。此外,我们如何将Ropes对象推回到STL容器上,例如vector
?最后,我们如何从STLvector
容器中检索Ropes对象?谢谢。您是否只下载了两个实现文件?我怀疑这是否可行,因为他们很可能依赖于SGI STL实现中的其他文件。这就解释了为什么你不能建造它们
获得SGI rope实现的最简单方法可能是使用,这是一个端口,并将SGI STL进一步开发到多个平台。虽然我还没有尝试在VS2008中使用它,但我很确定它是受支持的
但是,您将需要使用STLport作为一个完整的STL替换(事实上是这样),而不是提取一个或两个类,并尝试将其与VS2008附带的STL实现一起使用
也就是说,除非您想重写rope类,以便使用MS STL开箱即用,但这对我来说不是个好主意。谢谢您的回答。实际上,我们昨晚下载了STLport,但我们只提取了1到2个ROPE类。但是,现在你建议我们用完整的STLPART替换微软STL,我们必须建立一个新的VisualStudio C++项目。谢谢你的帮助。你知道我们在哪里可以找到一些关于如何使用Ropes类的好文档吗?我们还没有找到太多关于绳子的文档。有邮寄名单吗?谢谢,这里是一些好的Ropes文档的链接,<.>谢谢。