Como usar o istream com strings

Gostaria de ler um arquivo em uma string. Estou procurando maneiras diferentes de como fazê-lo com eficiência.

Usando um tamanho fixo * buffer de caractere

Eu recebi umrespond do Tony, que cria um buffer de 16 kb, lê esse buffer e anexa o buffer até que não haja mais nada para ler. Entendo como funciona e achei muito rápido. O que não entendo é que, nos comentários dessa resposta, diz-se que dessa maneira copia tudo duas vezes. Mas, pelo que entendi, isso só acontece na memória, não no disco, por isso é quase imperceptível. É um problema que ele copia do buffer para a seqüência de caracteres na memória?

Using istreambuf_iterator

O outra resposta Recebi usos istreambuf_iterator. O código parece bonito e minimalista, mas é extremamente lento. Não sei por que isso acontece. Por que esses iteradores são tão lentos?

Usando memcpy ()

Paraessa questã Recebi comentários de que deveria usar o memcpy (), pois é o método nativo mais rápido. Mas como posso usar memcpy () com uma string e um objeto ifstream? O ifstream não deve funcionar com sua própria função de leitura? Por que o uso do memcpy () arruina a portabilidade? Estou procurando uma solução que seja compatível com o VS2010 e o GCC. Por que o memcpy () não funcionaria com eles?

+ Qualquer outra maneira eficiente possível?

O que você recomenda, qual shell eu uso, para arquivos binários pequenos <10 MB?

(Eu não queria dividir esta pergunta em partes, pois estou mais interessado na comparação entre a maneira diferente de como posso ler um ifstream em uma string)

questionAnswers(2)

yourAnswerToTheQuestion