Próbowałem sobie ogarnąć w końcu ten enum i średnio mi idzie. Trafiłem znów na ten megatutorial i dalej średnio mi to pyka. Mam taki fragment kodu:

enum DIRECTION { DIRUP, DIRDOWN, DIRLEFT, DIRRIGHT };

DIRECTION Kierunek = PobierzWybranyPrzezGraczaKierunek();

switch (Kierunek)

{

case DIRUP: // ...

case DIR
DOWN: // ...

// itd.

}

Przy czym "Kod ten będzie poprawny oczywiście tylko wtedy, gdy funkcja

PobierzWybranyPrzezGraczaKierunek() będzie zwracała
@RaVo: zapoznaj sie jeszcze z enum classes i strongly typed enums.

np.

enum class Directions : unsigned char { Up, Down };
i funckja:

Directions gimmeDirections(){ return Directions::Up; }
Wtedy nie ma prawa mieszac to ci sie z np. intami i doskonale widac, ze sa to po porstu jakies stale, o podanym typie wew., do ktorych mozna dostac sie tylko za pomoca nazwy enuma.
Poważnie się zastanawiam nad tym czy w C++ kompilator optymalizuje zbędne wywołania funkcji w warunku stopu pętli. Czy w metodzie klasy dziedziczącej po kontenerze można pisać

for(int i=0; i < size(); ++i)
tudzież

for(auto it = begin(); it != end(); ++it)
Czy lepiej jednak

const int SIZE = size();
for(int i=0; i < SIZE; ++i)
oraz

const auto END = end();
for(auto it = begin(); it != END; ++it)
Jak wiadomo mechanizm
#programowanie #cpp

To teraz będzie laickie pytanie. Gdzie mogę poczytać o pisaniu wielowątkowych programów?

Aktualnie głównie mnie interesuje czy muszę blokować dostęp do obszaru pamięci, jeżeli czytam ją z wielu wątków? Czy muszę tylko zablokować podczas pisania do pamięci, żeby w tym czasie inny wątek nie czytał jej?

Proszę o wyrozumiałość :)
Czy muszę tylko zablokować podczas pisania do pamięci, żeby w tym czasie inny wątek nie czytał jej?


@kasper93: Nic nie musisz. Możesz sobie dowolnie operować na dowolnym obiekcie różnymi wątkami, jednak kiedy nie zastosujesz synchronizacji to może się zdarzyć tak, że jeden wątek nadpisze to co zrobił inny i program może nie zachować się tak jakbyś chciał.
@kasper93: jeśli tylko czytasz, to nie potrzebujesz żadnej synchronizacji. Jeśli jednak często czytasz, ale może się zdarzyć, że zaczniesz pisać, wtedy synchronizacja jest potrzebna wszystkim wątkom - bo a nóż widelec ktoś twoim wesoło czytającym wątkom coś podmieni.

Co poczytać? To co jest w standardowej bibliotece w C++11: http://en.cppreference.com/w/cpp/thread

Co jeszcze? Szczerze mówiąc sam podstawę dostałem na studiach, a potem tylko doczytywałem. Prawda jest też niestety taka, że dużo rzeczy ustandaryzowało
Czasami warto obejrzeć jakiś wykładzik, który wydaje się przydługawy... :)

How to Speed up a Python Program 114,000 times. Facet opisuje jak na przestrzeni kilku miesięcy optymalizował swój program. Prędzej czy później z pythona doszedł do C. Na załączonym obrazku fajna ciekawostka... po lewej typy pamięci rozróżnione ze względu na szybkość, tak jak nas uczono w szkole, a po prawej tak jak to wygląda naprawdę.

#programowanie #python #c #cpp #optymalizacja
źródło: comment_kNUdMLz2qvK4WF2B6dC6y0GIWLCwaYZw.jpg
Bjarne Stroustrup - The C++ Programming Language


@Crypton3: nie czytalem, ale na stronie autora jest:

This is not a good book for beginers. You are right! This book is written assuming that the reader is a programmer. It says so prominently and explicitly (at least five times). For beginners, I recommend Programming -- Principles and Practice Using C++. That book is also useful for people who have programmed a bit and
Czy w C++ jest coś takiego jak /dev/null ?

Muszę wczytywać dane z pliku sformatowanego w taki sposób, że w liniach rozpoczynających się od tabulatora są dane w formacie liczba śmieciowynapis liczba, a w pozostałych śmieci. Radzę sobie z tym tak:

ifstream file;
string trash;
int a, b;
...

if(file.peek() == '\t') {
file >> a >> trash >> b;
} else {
getline(file, trash);
}
Działa to ścierwo bardzo dobrze, ale
@Szanowny_Pan: załóżmy, że masz liczby 1, 2, 3, 4, 5, 6, 7. Jako korzeń wybierasz element środkowy, czyli 4. Liczby 1, 2, 3 będą w jego lewym poddrzewie, pozostałe w prawym. Dla niższych liści powtarzasz ten sam proces, dostajesz:

4

/ \

2 6

/\ /

1 3 5 7

Gdy wybierasz korzeń z listy o parzystej długości to jako korzeń wybierasz któryś z środkowych elementów.
@Mehgods: Jeżeli ktośtam nie odróżnia minimalizacji od zamknięcia to jego problem :D W ogóle jak to brzmi - minimalizuj po zamknięciu - to opcja wmawiania że czarne jest białe :P
tak na szybko zerknąłem, w bitcoingui.cpp, metoda void BitcoinGUI::closeEvent(QCloseEvent *event) (linia 672) ma zakomentowane sprawdzanie czy opcja jest zaznaczona. Moze to to :)
#visual #cpp #programowanie

Visual C++ 2010 (C++/CLI).

To działa:

List^ list = gcnew List();
String^ s = gcnew String("tekst");
list->Add(s);
A to nie:

List^ punkty = gcnew List(); // oczywiście dodałem using namespace System::Collections::Generic
Point^ p = gcnew Point(2,3);
punkty->Add(p);
Błąd:

generic type argument for 'T' cannot be 'System::Drawing::Point ^', it must be a value type or a handle to a reference type