Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在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 - Fatal编程技术网

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

如何在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<

堆栈溢出专家回答了这个问题,他们建议使用更好的字符串类,如SGI的Ropes,因为Ropes特别适合处理非常大的字符串。所以我们下载了SGI的rope.c和rope.h的一个版本。但是,我们无法在Windows Visual Studio 2008上编译ropes.c和ropes.h。另外,我们找不到任何使用SGI C++的接口的例子。 所以我们下载了一个更好的字符串库。我们修改了STL源代码,以使用更好的字符串库中实现的
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);
与STL
string
类相比,这个新代码生成的
std::bad_alloc
异常更少,但我们知道Ropes是处理非常大的字符串的最佳类。所以我们需要知道如何在WindowsVisualStudio2008上使用SGI源代码。Ropes代码中有许多特定于SGI的头文件。Windows Visual Studio 2008 C++头文件有哪些?


此外,在阅读了Ropes文档之后,对于如何将C/C++
char*
指针的以null结尾的内容转换为Ropes对象,我们仍然没有90%的把握。此外,我们如何
将Ropes对象推回到STL容器上,例如
vector
?最后,我们如何从STL
vector
容器中检索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文档的链接,<.>谢谢。