【问题标题】:Implement istream get for a character buffer?为字符缓冲区实现 istream get?
【发布时间】:2009-03-01 20:19:26
【问题描述】:

我想实现以下有一个字符缓冲区,我尝试移植的代码将此字符缓冲区放入流中,然后像这样进行获取

 char *buffer; //this is initialized
 int bufferSize;  //this is initlized
 std::istringstream inputStream (std::string(buffer, bufferSize));
 int getVal = inputStream.get();

编辑:上面的代码是最优的吗,其中对于 getVal,您将整个缓冲区复制到流中,然后在流上执行获取操作。

如何从缓冲区本身获取 getVal 值。

【问题讨论】:

    标签: c++ stream


    【解决方案1】:

    我不认为它是最优的,仅仅是因为构造一个 std::string 可能会导致整个缓冲区的副本。然而,istingstream 的用法看起来不错。

    要直接从缓冲区中获取,您可以执行以下操作:

    int bufferPos = 0;
    
    char getFromBuffer ()
    {
      if (bufferPos < bufferSize)
      {
        return buffer[bufferPos++];
      }
      else
      {
        return 0;
      }
    }
    

    不过,您可能希望为此添加一个更好的界面。也可能有更好的方法来构造带有 char* 的 istringstream,但我在快速浏览文档时没有看到。

    【讨论】:

    • 次要的挑剔:get() 不应该在 EOF 上返回 -1 吗?
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2011-07-19
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多