Mam zmienną typu stringstream, chciałbym wpakować do niej całą tablicę intów bez pomocy pętli. Czy to możliwe?
Przykład:
int tab[] = {5,6,2,3};
stringstream ss;
Da się do strumienia wpakować całą tablice, bez użycia pętli ?"
Mam zmienną typu stringstream, chciałbym wpakować do niej całą tablicę intów bez pomocy pętli. Czy to możliwe?
Przykład:
int tab[] = {5,6,2,3};
stringstream ss;
Da się do strumienia wpakować całą tablice, bez użycia pętli ?"
ss << tab[0] << tab[1] << tab[2] << tab[3];
Dlaczego nie lubisz pętli?
int idx = 0;
to_nie_petla:
if(idx < 4)
{
ss<<tab[idx];
++idx;
goto to_nie_petla;
}
A bardziej na poważnie to:
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
int main() {
std::stringstream ss;
int tab[] = {1, 2, 3, 4};
std::copy(tab, tab + 4, std::ostream_iterator<int>(ss));
return 0;
}
Ale i tak pod tym kodem kryje się pętla.
Swoją drogą, to proponuje wrzucać też jakiś separator między te liczby, bo póki co torównie dobrze możesz napisać:
ss << "5623";
@Patryk27, no sam chciałeś :P.
#include <iostream>
#include <sstream>
template <typename T, size_t Count>
struct hokus
{
static void pokus(std::stringstream& sstream, T* arr)
{
sstream << arr[0];
hokus<T, Count - 1>::pokus(sstream, arr + 1);
}
};
template <typename T>
struct hokus<T, 0>
{
static void pokus(std::stringstream& sstream, T* arr) {}
};
template <typename T, size_t Count>
void magic(std::stringstream& sstream, T(&arr)[Count])
{
hokus<T, Count>::pokus(sstream, arr);
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
std::stringstream sstream;
magic(sstream, arr);
std::cout << sstream.str() << "\n";
}
Żadnych pętli.
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
int main ()
{
int tab[]={5,6,2,3};
std::stringstream ss;
std::ostream_iterator<int> sss(ss,", ");
std::copy(tab,tab+sizeof(tab)/sizeof(*tab),sss);
return 0;
}
#include <iostream>
#include <sstream>
void cpy(std::stringstream &ss,int *tab,int *end)
{
if(tab<end)
{
ss<<*tab<<", ";
cpy(ss,tab+1,end);
}
}
int main ()
{
int tab[]={5,6,2,3};
std::stringstream ss;
cpy(ss,tab,tab+sizeof(tab)/sizeof(*tab));
return 0;
}
#include <iostream>
#include <sstream>
template<typename T>
void call(T& array, std::ostream& o)
{
static auto it = std::begin(array);
if(it != std::end(array)) {
o << *it;
++it;
call(array, o);
}
}
int main()
{
std::stringstream s;
int a[] = { 1, 2, 3, 4, 5, 6 };
call(a, s);
std::cout << s.str();
return 0;
}
win