2009-09-29 2 views
2

Или ostringstream?Как эффективно копировать istringstream?

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

Я думаю, что memcpy тоже не будет работать.

+1

Почему вы хотите закрыть этот вопрос? –

+1

Интересно, комментирует кто-нибудь? – GManNickG

+1

Я думаю, что это правильный вопрос :) – AraK

ответ

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

Edit: Основываясь на ваш комментарий к другому ответу, это звучит, как вы можете также скопировать все содержимое fstream в strinstream. Вы не хотите/должны делать этот персонаж одновременно (и вы правы - это обычно довольно медленно).

// 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 Я не знал, что есть перегрузка для буферов! – AraK

+0

Да, это один из тех милых маленьких трюков, о которых почти никто не знает. Не полезно все это часто, но когда вы хотите, что он делает, это делает вещи намного проще. –

+2

Не должно быть 'ostringstream' вместо' istringstream'? –

2

Вы не можете просто копировать потоки, вам нужно скопировать их буферы с помощью итераторов. Например:

#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

Не копирует ли один персонаж одновременно? –

+1

Вы измерили это? – AraK

+0

Я измерил его, когда input был файлом ifstringstream. Разница была огромной. –

Смежные вопросы