首先,我是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()