3

首先,我是 C++ 的新手,来自 Java。我想做一件简单的事情:使用 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());
}
4

3 回答 3

7

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

std::copy(inputStreamIterator, inputStreamEnd,
    std::back_inserter(imageVector));
于 2013-02-05T14:21:23.990 回答
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>());
于 2013-02-05T14:43:00.817 回答
1

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

于 2013-02-05T14:21:19.727 回答