2009-09-29 8 views
2

Ou ostringstream?Comment copier efficacement istringstream?

istringstream a("asd"); 
istringstream b = a; // This does not work. 

Je suppose que memcpy ne fonctionnera pas non plus.

+1

Pourquoi voulez-vous clore cette question? –

+1

Je me demande aussi, commente quelqu'un? – GManNickG

+1

Je pense que c'est une question valable aussi :) – AraK

Répondre

6
istringstream a("asd"); 
istringstream b(a.str()); 

Edit: En fonction de votre commentaire à l'autre réponse, il semble que vous pouvez également copier tout le contenu d'un fstream dans un strinstream. Vous ne voulez pas/devez faire un caractère à la fois non plus (et vous avez raison - c'est généralement assez lent).

// create fstream to read from 
std::ifstream input("whatever"); 

// create stringstream to read the data into 
std::istringstream buffer; 

// read the whole fstream into the stringstream: 
buffer << input.rdbuf(); 
+0

+1 Je ne savais pas qu'il y avait une surcharge pour les tampons! – AraK

+0

Oui, c'est un de ces petits trucs mignons que presque personne ne connaît. Pas très utile, mais quand vous voulez ce que ça fait, ça rend les choses un peu plus simples. –

+2

Cela ne devrait-il pas être «ostringstream» au lieu de «istringstream»? –

2

Vous ne pouvez pas simplement copier des flux, vous devez copier leurs tampons en utilisant des itérateurs. Par exemple:

#include <sstream> 
#include <algorithm> 
...... 
std::stringstream first, second; 
..... 
std::istreambuf_iterator<char> begf(first), endf; 
std::ostreambuf_iterator<char> begs(second); 
std::copy(begf, endf, begs); 
+0

Est-ce que copier un caractère à la fois n'est pas lent? –

+1

L'avez-vous mesuré? – AraK

+0

Je l'ai mesuré quand l'entrée était un fichier ifstringstream. La différence était énorme. –

Questions connexes