stdio a iostream

0

Glownie programowalem uzywajac biblioteki iostream, a chcialem uzyc biblioteki stdio zeby program dzialal szybciej.
Napisalem 2 programy ( 1 przy uzyciu iostream, a drugi przy stdio) i dzialaja rownowaznie tylko nie wiem dokladnie dlaczego.

Oto fragment pierwszego :

              for(int i=0;i<n;++i)
              {
                      while(true)
                      {
                          cin >> literka;
                          pom.push_back(literka);
                          if((cin.peek()=='\n')|| (cin.peek()==EOF)) break;
                      }
             }
 

a oto fragment drugiego

 for(int i=0;i<=n;++i)
              {
                      while(true)
                      {
                                 literka=getchar();
                                 pom.push_back(literka);
                                 if(literka=='\n') { break;}
                      }
       
              }
 

Glownie chodzi mi o to czemu w pierwszym w petli for jest i<n a w tym drugim i<=n. Wczesniej gdy w drugim bylo i<n program nie wczytywal ostatniego znaku w linii. Co moze byc tym spodowowane ?
Z gory dzieki za odpowiedz

0

http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/ zainteresuj się tym jeśli chcesz aby program działał szybciej.

0

Uzylem tego oczywiscie , ale i tak roznica bardzo duza. W przypadku cin z wylaczona synchronizacja program dzialal 1,98 s, a w drugim przypadku 0,93 s wedlug sprawdzarki na spoju

0

Hmm, na pierwszy rzut oka pierwsza pętla nie dodaje '\n' na koniec pom, ale druga pętla już tak.

Co to znaczy:

program nie wczytywal ostatniego znaku w linii

Na mój gust to te programy wczytują po ok n całych linii, a nie po jednej linii.

0

a nie lepiej po prostu:

string pom;
getline(cin, pom);

lub

char buff[256];
fgets(buff, sizeof(buff), stdin);
0

Nie lepiej z tego powodu ze gdy np wczytam taki tekst do vectora AKAZW to pozniej uzywam sortowania i bede miec taki vector AAKWZ, a gdybym mial stringa to nie wiem czy jest w ogole funkcja ktora by to tak posortowala. Co do drugiego sposobu to go nie znam.

A co do odpowiedzi Wibowit :
Oznacza to ze mam dana petla ktora ma wczytac przykladowo 20 wyrazow, kazdy nie dluzszy niz 100 znakow. Te znaki pojedyczno wczytuje jako char i umieszczam w vectorze. I polega no tam tym ze gdy wyraz ma dlugosc przykladowo 35 znakow to wczyta 34 i zajmie sie nastepnym wyrazem nowej lini

1 użytkowników online, w tym zalogowanych: 0, gości: 1