将流输入到矢量<字符>-矢量迭代器不可解引用



首先,我是C++的新手,来自Java。我想做一件简单的事情:使用URL-libs从网络上加载一张图片,并将其保存到一个char向量中。加载图像效果良好,我可以将其保存到磁盘上,但当我尝试将其加载到字符向量中时,我在运行时会出现以下错误:

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());
}

您的std::vector<char>没有容量,无法直接使用std::copy。相反,您应该使用std::back_insert_iterator,它将在您的std::vector上调用push_back()。构建这种迭代器的最简单方法是使用std::back_inserter模板函数。

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

您可以通过使用输入迭代器初始化向量来完全避免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>());

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

相关内容

  • 没有找到相关文章

最新更新