2013-02-05 25 views
2

首先,我是來自Java的C++新手。 我想做一件簡單的事情:使用URDL-libs從網站加載圖片並將其保存到char-向量中。 加載圖像工作得很好,我可以將其保存到磁盤,但是當我試圖將其加載到一個char向量相反,我在運行時得到這個錯誤輸入流向量<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()); 
} 
+1

所以它的失敗在'copy'功能?你正在使用哪種C++實現? – user17753

+1

你的代碼爲我編譯。你有沒有包含所有必要的標題?哪條線給你的錯誤? –

+0

很抱歉,這是一個運行時錯誤! – Mirco

回答

7

std::vector<char>沒有能力,你不能直接使用std::copy。相反,您應該使用std::back_insert_iterator,這會在您的std::vector上調用push_back()。構建這種迭代器的最簡單方法是使用std::back_inserter模板函數。

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

謝謝,這工作 – Mirco

1

,而不是imageVector.begin()你應該使用back_insert_iterator

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