在不使用 boost 的情况下从字符串流中提取一组字符的正确 C++11 方法是什么?
如果可能的话,我想在不复制的情况下执行此操作,因为使用它的位置是在关键数据循环中。不过, std::string 似乎不允许直接访问数据。
例如,下面的代码从字符串流中执行子字符串复制:
inline std::string left(std::stringstream ss, uint32_t count) {
char* buffer = new char[count];
ss.get(buffer, count);
std::string str(buffer); // Second copy performed here
delete buffer;
return str;
}
- 我什至应该根据 c++11 使用 char *buffer 吗?
- 如何避免制作第二份副本?
我的理解是向量初始化每个字符,所以我想避免这种情况。
另外,这需要传递到一个接受 const char * 的函数中,所以现在在运行之后我被迫执行 .c_str() 。这也能复印吗?
如果能够传回 const char * 那就太好了,但这似乎违背了“正确的”c++11 风格。
为了理解我想要做什么,这是我想要“有效”使用它的目的:
fprintf( stderr, "Data: [%s]...", left(ststream, 255) );
但 c++11 强制:
fprintf( stderr, "Data: [%s]...", left(str_data, 255).c_str() );
我在这里制作了多少份该字符串的副本?
如何将其减少为字符串流中的单个副本?