![]() |
![]() |
|
Programiranje Programski jezici, tehnike, alatke... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
![]() |
#41 |
Član
|
![]()
Hmm da.....
![]() Pošto su očito veliki eksperti na ovom forumu dali dijagnozu da je kreator C++ mentalno nestabilan(ili je možda čovek glup pa nije znao bolje) i zato je i upropastio jezik, koji očigledno samo idioti koriste koji ne znaju za bolje. Pošto ima dosta takvih idiota na forumu nek bude ova tema sticky(a nek moderator izbrise ove nebitne postove)... |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku NISAM NESTO SMART na korisnoj poruci: | ||
Belphegor (13.2.2012) |
![]() |
#42 |
Veteran
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
|
![]()
Ne, ne, nisam rekao da je Bjarn poremećen sam po sebi, nego da neka sila (koju sam nazvao gremlin) konstantno sabotira sve pokušaje pravljenja dobrog skupa jezik-bilblioteka-runtime. ODkud ja znam šta je po sredi, možda bad luck. Ja mislim da je C# odličan jezik, .NET biblioteka je super, coding standardi koje nameće dobri, ali virtuelna mašina...; isto i sa Javom.
Znači pun pogodak bi bio jezik kao C# sa mogućnostima C-a, nativno kompajliran, sa velikom bibliotekom kao što su .NET i Java standardna, i da mu ne trebaju header fajlovi, odnosno da se sveinformacije sadrže u binarnim fajlovima, kao što je to kod .NET assembly-a ili Java fajlova. |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku ivan90BG na korisnoj poruci: | ||
Todors (13.2.2012) |
![]() |
#43 | |||
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
![]() Citat:
Ajd' onda neka neko od vas napravi split string funkciju u C-u i pomogne Ivanu umesto da bez veze trolujete ovu temu. Ako vam se ne svidja C++ ne morate da ga koristite! Citat:
Circular dependency. Citat:
![]() Ako ne umes da ga procitas "nadeni" mu drugo ime: Kod:
typedef glupavo_ime superCoolIme; Poslednja ispravka: Belphegor (14.2.2012 u 18:27) |
|||
![]() |
![]() |
![]() |
#45 | |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
![]() Citat:
![]() ![]() |
|
![]() |
![]() |
![]() |
#46 |
V.I.P. Programiranje
|
![]() |
![]() |
![]() |
Sledećih 3 korisnika se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
![]() |
#47 |
Član
Član od: 3.11.2009.
Lokacija: root_localhost
Poruke: 132
Zahvalnice: 16
Zahvaljeno 20 puta na 12 poruka
|
![]()
@Ivan-94:
Kod:
char** explode( const char delim, char* src ) { char * start = src; char * ptr = src; char ** tab; int i = 0, pos = 0, len = 0; int items = 0; while( *src ) { if( *src == delim ) items++; src++; } if( !items ) return NULL; items++; src = start; tab = new char * [items]; while( *ptr && i < items ) { if( *src == delim || *src == 0 ) { len = 0; ptr = start; while( ptr < src ) { len++; ptr++; } tab[ i ] = new char [len + 1]; pos = 0; while( start < ptr ) { tab[ i ][pos] = *start; start++; pos++; } tab[ i ][pos] = 0; start = ptr + 1; i++; } src++; } tab[ i ]= NULL; return tab; } Koristis ovako: Kod:
char ** Bla = explode( ':', "1.1.1.1:28960" ); Bla[ 0 ] // Pokazivac na prvi niz karaktera Bla[ 1 ] // Pokazivac na drugi niz // Itd... Kod:
int count( char ** tabsrc ) { int i = 0; while( tabsrc[ i ] != NULL ) i++; return i; } Kod:
int c = count( Bla ); for( int i = 0; i < c; i++ ) delete [ ] Bla[ i ]; delete [ ] Bla; |
![]() |
![]() |
![]() |
#48 | |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
![]()
More C++
![]() Kod:
#include <iostream> #include <string> #include <regex> #include <iterator> #include <limits> int main() { std::string str = ".HEHE:.HOHO.HIHI,HAHA,.:"; std::string delim = ":.,"; std::regex pattern("[^" + delim + "]+"); std::vector<std::string> result; const std::sregex_token_iterator end; std::sregex_token_iterator i(str.begin(), str.end(), pattern); for(; i != end; ++i) { result.push_back(*i); } std::ostream_iterator<std::string> out(std::cout, "\n"); std::copy(result.begin(), result.end(), out); std::cout << "Press enter to exit..." << std::endl; std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ); return 0; } Citat:
Poslednja ispravka: Belphegor (13.2.2012 u 22:55) |
|
![]() |
![]() |
![]() |
#49 |
Starosedelac
|
![]()
Mislis regex
![]() |
![]() |
![]() |
![]() |
#50 |
Član
|
![]()
Dali bi mi neko znao reći is kog razloga kada random funkciju inicijaizujem na sledeći način uvek dobijam istu listu nasumičnih brojeva?
![]() Kod:
srand (NULL); Kod:
srand ( time(NULL) ); |
![]() |
![]() |
![]() |
#51 |
Starosedelac
|
![]()
Zato što "random" nije stvarno random... Zavisno od implementacije random funkcija može da varira, ali se uglavnom implementira kao:
(note: brojevi su ovde samo proizvoljni) Kod:
unsigned seed = 0; unsigned rand() { seed = seed * 123456789 + 12345; return (seed / 12345) % 54321; } Kod:
void srand(unsigned s) { seed = s; } Razlog zašto time(0) daje uvek drugačije vrednosti je zato što se time menja svake sekunde, tako da u svakoj sekundi imaš drugačiju sekvencu random brojeva. Razlog zašto se tebi program vrti beskonačno je jer uvek pozivaš srand( time(0) )! Obzirom da je izvršenje programa veoma brzo (milijarde operacija po sekundi), tebi se seed uvek postavlja na istu vrednost, pa rand() računa istu vrednost u toku jedne sekunde. TLDR: pozovi samo jednom srand( time(0) ) na početku programa i uživaj. |
![]() |
![]() |
![]() |
#52 |
Član
|
![]()
Tako i radim, pozovem samo jednom... Zanimljivo je da kad uradim ovaj test kod:
Kod:
#include<iostream> #include <stdlib.h> #include <time.h> using namespace std; int indexi [9][9]; //------------------------------------------------------------ //funkcija koja vraca random broj u intervalu 0 - 8 //------------------------------------------------------------ int randomBroj() { int random = rand() %9; return random; } //------------------------------------------------------------ void popunaKombinacija() { int k=0,x,y; for(int a=0;a<9;a++) { for(int b=0;b<9;b++) { indexi[a][b]=0; } } while(k<81) { x=randomBroj(); //funkcija koja vraca y=randomBroj(); //nasumicni broj u intervalu 0-8 if(indexi[x][y]==0) { indexi[x][y]=k+1; k++; } } } //--------------------------------------------------------------- int main() { srand( time(0) ); popunaKombinacija(); for(int i=0;i<9;i++) { cout<<" "<<endl; if(i%3==0) cout<<" "<<endl; for(int j=0;j<9;j++) { if(j%3==0) cout<<" "; if(indexi[i][j]==0) cout<<". "; else if(indexi[i][j]<10) { cout<<0; cout<<indexi[i][j]; cout<<" "; } else { cout<<indexi[i][j]; cout<<" "; } } } getchar(); getchar(); } ![]() |
![]() |
![]() |
![]() |
#53 |
Starosedelac
|
![]()
Onda nije problem u random brojevima, već u tom drugom kodu...
|
![]() |
![]() |
![]() |
#54 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
![]()
Ne razumem zasto nasumicno biras indexe niza kad bi isto dobio i ovako:
Kod:
#include <iostream> #include <algorithm> #include <ctime> #include <iterator> int main() { srand((unsigned int)time(0)); int indexi[9][9]; int i = 0; std::for_each(&indexi[0][0], &indexi[0][0] + 81, [&i](int& inx) { inx = ++i; }); std::random_shuffle(&indexi[0][0], &indexi[0][0] + 81, [](const int& num){ return rand() % num; }); std::ostream_iterator<int> out(std::cout, "\n"); std::copy(&indexi[0][0], &indexi[0][0] + 81, out); std::cin.get(); return 0; } Kod:
#include <iostream> #include <algorithm> #include <ctime> #include <iterator> int moj_random(const int& num) { return rand() % num; } int main() { srand((unsigned int)time(0)); int indexi[9][9]; int k = 0; for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { indexi[i][j] = ++k;// 1-82 } } std::random_shuffle(&indexi[0][0], &indexi[0][0] + 81, moj_random); for(int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { std::cout << indexi[i][j] << std::endl; } } std::cin.get(); return 0; } Poslednja ispravka: Belphegor (14.2.2012 u 20:39) Razlog: i++ --> ++i (zato sto hoce vrednosti od 1 - 82) |
![]() |
![]() |
![]() |
#55 |
Kekule Mekule
|
![]()
Da li std::list brise sve elemente iz liste ako obrisem instancu neke klase koja sadrzi listu, i.e. da li u destruktoru klase treba da pozivam mojaLista.clear() ili ne? (jbg navikao sam na garbage collector u c#
![]() |
![]() |
![]() |
![]() |
#56 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
![]()
Ne, u destruktoru klase ne moraš da zoveš clear() metod. Destruktor liste uništava sve elemente liste.
Napomena, ako su elementi liste pokazivači, onda moraš ručno da obrišeš objekte na koje ti pokazivači, je li, pokazuju (videti primer): Kod:
std::list<int*> ints; ints.push_back(new int); ints.push_back(new int); ints.push_back(new int); // brisanje for(auto iter = begin(ints); iter != end(ints); ++ iter) delete *iter; // a evo i fensi načina ;) std::for_each(begin(ints), end(ints), [](int* pi) { delete pi; }); Ako hoćeš da automatizuješ ovo malo, možeš da koristiš pametne pokazivače: Kod:
std::list<std::shared_ptr<int>> ints; ints.push_back(std::make_shared<int>()); ints.push_back(std::make_shared<int>()); ints.push_back(std::make_shared<int>()); |
![]() |
![]() |
![]() |
#57 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
![]()
Zavisi sta ti je u listi.
Ako drzi pokazivace na objekte kreirane na heap-u onda moras rucno da brises pre nego ubijes tu klasu Kod:
class Foo { private: std::list<Bar*> lb; ... }; Foo::~Foo() { const auto& end = lb.end(); auto it = lb.begin(); for(; it != end; ++it) { Bar* p = *it; delete p; p = nullptr; } } Kod:
#include <memory> typedef std::shared_ptr<Bar> sp_bar; ... class Foo { private: std::list<sp_bar> lb; ... }; ... lb.push_back(sp_bar(new Bar(...)); ![]() A evo ti i pomocna biblioteka za detektovanje curenja memorije. http://www.windows7download.com/win7.../myvcnzgr.html EDIT: Ninja M.Silenus ![]() ![]() |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci: | ||
EclipsE (4.4.2012) |
![]() |
#58 |
V.I.P. Programiranje
|
![]()
Upravo tako, samo da pojasnim, kad se std::list uništi (izađe van scope-a ili pomoću delete) on briše svoje elemente. To znači da ako lista sadrži pokazivače, pokazivači će biti uništeni, ali ne i objekti na koje oni pokazuju. U suštini, pravilo važi - o dealokaciji memorije brine onaj ko ju je alocirao. Ako si ti pozvao new kako bi alocirao neku memoriju, moraš pozvati i delete da tu istu memoriju dealociraš. Ostalo sve nije tvoja briga.
|
![]() |
![]() |
![]() |
#59 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
![]()
Lets get crazy.
![]() Ako ces da brises rucno evo genericke funkcije, bazirano na M.Silenus for_each funkciji: Kod:
template< typename T > typename std::enable_if< std::is_pointer< typename T::value_type >::value, void >::type delete_container(T& c) { std::for_each(std::begin(c), std::end(c), [] ( typename T::value_type v) { delete v; } ); } ... std::list<int*> ints; std::vector<Foo*> foos; ... delete_container(ints); delete_container(foos); |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci: | ||
EclipsE (4.4.2012) |
![]() |
#60 |
Kekule Mekule
|
![]()
Da da, sad se secam. Sta cu proslo je 5 godina od kako sam zadnji put pipnuo C++, zaborave se neke stvari
![]() |
![]() |
![]() |
![]() |
Bookmarks sajtovi |
Tagovi |
c++, how to, pomoc, programiranje |
Alatke vezane za temu | |
Vrste prikaza | |
|
|