[ grabber @ 18.01.2010. 12:21 ] @
Moze li mi neko na najjednostavniji nacin objasniti upotrebu stream operatora, po mogucnosti na nekom jednostavnom primjeru? Na faksu to radimo, a nikakve literature nemamo, prof kaze "ne treba vam nista, samo slusajte i gledajte na predavanjima", a predavanja su :\

Imamo zadatak uraditi program koji provjerava da li je unesena rijec palindrom, koristeci stream iteratore i copy_if algoritam... ali stream operatori mi nikako ne idu u glavu
[ Mihajlo Cvetanović @ 18.01.2010. 12:36 ] @
Do sad nisam ni znao da to postoji. Google je pun korisnih linkova, evo prva dva:

http://www.informit.com/guides...spx?g=cplusplus&seqNum=257
http://stdcxx.apache.org/doc/stdlibug/2-3.html
[ grabber @ 18.01.2010. 14:31 ] @
čudo je taj google :) hvala drug
[ grabber @ 18.01.2010. 21:34 ] @
Cijeli dan radim ovaj palindrom, i ne moze :(

evo kod kojeg imam za sad, mislim da sam jako blizu, i da negdje grijesim oko pozivanja template funkcije:

Code:
#include<string>
#include<iostream>
#include<iterator>
#include<algorithm>

using namespace std;

template<typename T, typename It, typename it>
T gen_srednja(It pocetak, It kraj, it pocetak2)
{
       int palindrom = 0;
       while ( pocetak != kraj )
            {
                   if(*pocetak==*pocetak2) 
                   {
                           palindrom=1;
                           pocetak++;
                           pocetak2++;
                   }
                   else 
                   { 
                           palindrom=0;
                           break;
                   }
           }
      if (palindrom==1) 
            return "Palindrom";
}

int main()
{
       string a;
       copy(istream_iterator<char> (cin), istream_iterator<char> (), back_inserter(a));
       string b(a.begin(), a.end());
       reverse(b.begin(), b.end());
       cout << gen_srednja<string::iterator>(a.begin(),a.end(), b.begin());
       system("pause");
       return 0;
}
[ Mihajlo Cvetanović @ 19.01.2010. 09:38 ] @
Ja sam mislio da rešenje treba da bude u par linija koda, da bi shvatio moć tih gotovih algoritama i funkcija iz STL. U ovom slučaju ti treba da utvrdiš da li je neki string jednak stringu koji se dobija obrtanjem redosleda slova u tom stringu. To invertovanje stringa treba uraditi na neku finu elegantnu foru u jednoj liniji. Kad obrneš string samo treba da ga uporediš sa originalom. Ne znam doduše kako za to iskoristiti copy_if, ali zato si ti tu :-)
[ grabber @ 19.01.2010. 14:15 ] @
Citat:
Mihajlo CvetanovićJa sam mislio da rešenje treba da bude u par linija koda, da bi shvatio moć tih gotovih algoritama i funkcija iz STL. U ovom slučaju ti treba da utvrdiš da li je neki string jednak stringu koji se dobija obrtanjem redosleda slova u tom stringu. To invertovanje stringa treba uraditi na neku finu elegantnu foru u jednoj liniji. Kad obrneš string samo treba da ga uporediš sa originalom. Ne znam doduše kako za to iskoristiti copy_if, ali zato si ti tu :-)


A može i u par linija koda? Vidim ja da sam nešto predugo uradio : )

Parametri template funkcije moraju biti pocetak_prvog, kraj_prvog, pocetak_drugog i pretpostavimo da su oba stringa jednake duzine. Eh a najvise me brine kako pozvati template funkciju ciji su paramtetri iteratori?
[ Mihajlo Cvetanović @ 19.01.2010. 15:00 ] @
Code:

string a = "nesto";
string b(a);
reverse(b.begin(), b.end());
if (a == b)
  cout << "Palindrom";


Ovo je sa reverse, a sa copy_if nemam pojma.

Sad vidim da i ti imaš reverse, ali šta si ovo posle komplikovao sa gen_srednja?