3

まず第一に、私は Java から来た C++ の初心者です。簡単なことをしたい: URDL ライブラリを使用して 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 に答える