2

ここに簡単なプログラムがあります

#include <iostream>
#include <deque>
#include <string.h>

std :: deque <char> d;

int main ()
{
    const char * X = "abcdefg";

    d .insert (d .end (), X, X + strlen (X));

    d .erase  (d .begin (), d .begin () + 4);

    d .insert (d .end (), X, X + strlen (X));

    std :: cout .write (& d [0], d .size ());
}

出力は「efgabcdefg」になると予想していましたが、実際の出力は 16 進数で次のようになります。

65 66 67 00  00 00 00 C9  0B 02

「efg???????」とは

何がうまくいかなかったのですか?

4

3 に答える 3

2

他の人が指摘したように、 の結果に対してポインター演算を行うことはできず、&deque<>::operator[]妥当なものを期待することはできません。これは に対して保証されてstd::vectorいますが、これは特殊なケースです。

あなたが望むと思われることを行う慣用的な方法は次のとおりです。

std::copy( d.begin(), d.end(), std::ostream_iterator<char>( std::cout ) );

のタイプに関係なく、それは真実ですd

しかし、なぜ使用しないのですかstd::vector<char>。のような安価にコピーできるタイプの場合、最初の であっても、charおそらくdequeとにかくより高速ですerase

于 2013-05-08T13:56:45.560 に答える