如何让istringstream更有效率?
How to make istringstream more efficient?
#include <sstream>
using namespace std;
const char* GetHugeString();
int main()
{
const char* p = GetHugeString();
//
// Below will copy the huge string into a std::string object!
//
istringstream sstrm{p};
return {};
}
istringstream
不需要大字符串的副本;一个以 null 结尾的字符串指针就足够了。但是 istringstream
的 ctor
仅采用 std::string
,而不是 std::string_view
(仅限 c++1z)作为其参数。
在这种情况下,是否有解决方法可以使 std::istringstream
更有效率?
您可以简单地分配 istringstream
内部使用的缓冲区:
istringstream stream;
stream.rdbuf()->pubsetbuf(p, strlen(p));
这不会复制字符串。请注意,pubsetbuf()
想要 char*
而不是 const char*
,但它实际上并没有修改字符串,因此您可能会在传递它之前 const_cast
您的 C 字符串指针。
#include <sstream>
using namespace std;
const char* GetHugeString();
int main()
{
const char* p = GetHugeString();
//
// Below will copy the huge string into a std::string object!
//
istringstream sstrm{p};
return {};
}
istringstream
不需要大字符串的副本;一个以 null 结尾的字符串指针就足够了。但是 istringstream
的 ctor
仅采用 std::string
,而不是 std::string_view
(仅限 c++1z)作为其参数。
在这种情况下,是否有解决方法可以使 std::istringstream
更有效率?
您可以简单地分配 istringstream
内部使用的缓冲区:
istringstream stream;
stream.rdbuf()->pubsetbuf(p, strlen(p));
这不会复制字符串。请注意,pubsetbuf()
想要 char*
而不是 const char*
,但它实际上并没有修改字符串,因此您可能会在传递它之前 const_cast
您的 C 字符串指针。