【问题标题】:Inputstream to vector<char> - vector iterator not dereferencable向量的输入流<char> - 向量迭代器不可解引用
【发布时间】:2013-01-20 11:57:47
【问题描述】:

首先,我是来自 Java 的 C++ 新手。 我想做一件简单的事情:使用 URDL-libs 从 web 加载图片并将其保存到 char-vector。 加载图像工作正常,我可以将其保存到磁盘,但是当我尝试将其加载到字符向量中时,在运行时出现此错误:

Expression: vector iterator not dereferencable

这是我的代码:

urdl::istream inputStream( url );
if( inputStream )
{
    inputStream >> std::noskipws;
    istream_iterator<char> inputStreamIterator( inputStream ), inputStreamEnd;
    string dateiname = "test.png";
    vector<char> imageVector;

    ofstream outputStream( dateiname, ios_base::binary );
    ostream_iterator<char> outputStreamIterator(outputStream);
    copy( inputStreamIterator, inputStreamEnd,  imageVector.begin());
}

【问题讨论】:

  • 所以copy 函数失败了?您使用的是哪种 C++ 实现?
  • 您的代码为我编译。你有#included 所有必要的标题吗?哪一行给出了错误?
  • 抱歉,这是运行时错误!

标签: c++ boost vector stream


【解决方案1】:

你应该使用back_insert_iterator而不是imageVector.begin()

【讨论】:

    【解决方案2】:

    您的std::vector&lt;char&gt; 没有容量,您不能直接使用std::copy。相反,您应该使用std::back_insert_iterator,它将在您的std::vector 上调用push_back()。构建此类迭代器的最简单方法是使用std::back_inserter 模板函数。

    std::copy(inputStreamIterator, inputStreamEnd,
        std::back_inserter(imageVector));
    

    【讨论】:

      【解决方案3】:

      您可以完全避免 std::copy 调用,方法是使用输入迭代器初始化向量:

      std::vector<char> imageVector(
          std::istream_iterator<char>(inputStream), 
          std::istream_iterator<char>());
      

      或

      std::vector<char> imageVector(
          std::istreambuf_iterator<char>(inputStream),
          std::istreambuf_iterator<char>());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多