Mam program, który w podanym przedziale wyszukuje 3 takie same liczby. Jeśli wystąpią 3 takie same, wyrzuca TAK. Jeśli nie wystąpią - NIE.
Pytanie do Was. Nie ogarniam czytania tego kodu. Rozpisuję sobie step by step, ale wychodzi jakaś kosmicznie niezrozumiała mieszanka. Ktoś ma sposób na rozpisanie sobie takiego programu, aby był zrozumiały i jasny dla newbie?

http://pastebin.com/jChUZjZm

#naukaprogramowania #cpp
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wytrzzeszcz: Kiedy przedstawiona naiwna implementacja jest prosta jak drut, a op napisał że jej nie rozumie.
@zortabla_rt: Jedyny problem jaki możesz mieć to to że ta implementacja dla drugiego indeksu leci poprzez poprzednie a nie następne. To znaczy szuka czy dla elementu [i] nie pojawiły się wcześniej nie pojawił się taki sam element [j], a jeśli tak to czy za nim ale przed [j] niema takiego samego.
  • Odpowiedz
@zortabla_rt: @brylant_brylant: Sortowanie ma złożoność obliczeniową O(n logn), należy wystrzegać się sortowania dużych tablic. Proponuję zrobić to odwrotnie... Najpierw przejechać całą tablicę od lewa do prawa i przepisać do drugiej tablicy wszystkie elementy, które są podzielne przez 5 (reszta z dzielenia przez 5 == 0).

Dopiero wtedy sortujesz tę tablicę. Dzięki temu sortujesz mniej elementów ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@MamCieNaHita: Tyle że w twoim wypadku napisanie static do factorials::tab wymaga aby ta zmienna wisiała w pamięci, a reguła ODR wymaga od niej jednego miejsca definicji czyli to co podał @Lerhond. Generalnie już lepiej robić osobne zmienne poza klasą, np w jakimś namespacesie, albo deklarować to jako statyczną funkcję constexpr. dek Zmienna i w pętli nie jest constexpr więc jej użycie nie da wartości constexpr, Jednak da podpowiedź
  • Odpowiedz
Czy da się stworzyć w c++ listę złożoną z obiektów różnych klas? Coś w stylu:
`class Shape{
public:
int a;
};

class
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Snori: Na pytanie postawione stricte w ten sposób jedną odpowiedzią jest że język tego nie umożliwia.
Dlatego robi się listę wskaźników na obiekty polimorficzne. Jak sobie z nimi poradzić? Poprzez dynamiczne rzutowanie:
Sphere* s = dynamic_cast(List[0]);
if( s ) // sprawdzenie czy s != nullptr, które dynamic cast zwraca gdy obiekt nie jest
  • Odpowiedz
@Snori: robisz tablicę typów std::variant (jeśli ma ograniczony zbiór możliwych klas), albo std::any, jeśli nieokreślony. Variant wygeneruje szybszy kod.
  • Odpowiedz
jaką polecacie książkę do nauki c++? nie musi być zupełnie od podstaw, bo na studiach maiłem trochę programowania, także takie pojęcia jak konstruktor, destruktor, klasy itp. nie są mi obce, jednak chciałby rzetelnie przerobić wszystko od początku i sobie przypomnieć.
jak najbardziej może być po angielsku
#programowanie #cpp
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

jak to się dzieje, że to działa?

constexpr const char &at(const std::size_t &n) const {
if (n >= size)
throw std::outofrange(std::to_string(n));
return _data[n];
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@n_i_e_rozumiem: Ale co tu ma nie działać? Constexpr jest tylko podpowiedzią dla kompilatora, możliwe że skompiluje się jako zwykła funkacja. Co ciekawe przy obliczaniu wartości constexpr jest analizowana tylko jedna gałąź brancha, czyli dla n mniejszego od rozmiaru to trow wogóle nie jest brane pod uwagę.
Dzięki temu łatwo można sprawdzić czy czasem funkcja constepr nie została skompilowana wołając np nie zaimplementowaną funkcję w branczu ale koniecznie zależnym od parametru.
  • Odpowiedz
Mam klasę abstrakcyjną Blob z funkcjami wirtualnymi Blob::fromArray(const QByteArray& raw) i Blob::toByteArray()->QByteArray. Weźmy jej klasę pochodną, Matrix; przeciążyłem operatory QDataStream w taki sposób:

QDataStream& operator<<(QDataStream& stream, const Matrix& in) {
stream << in.toArray();
}
QDataStream& operator>>(QDataStream& stream, Matrix& out) {
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#programowanie #cpp

Moje ostatnie doświadczenia w pracy przypominają mi budowanie ściany z pustaków. Z tym, że pomiędzy pustakami zaprawa jest z rzadkiego gówna, trzeba ją nakładać widłami i pustaki też trzeba układać widłami.

  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

no elo. czy zawsze powinno się używać inteligentnych wskaźników? w STLu nie ma listy cyklicznej, której potrzebuję, więc muszę ją sobie sam naskrobać. powinienem to zrobić na unique_ptr'ach z std::move przy usuwaniu elementu, przepinaniu elementu, etc, czy może po prostu zrobić po barbarzyńsku na gołych wskaźnikach z myślą, że nie przeoczę żadnego wycieku i będzie cacy?

#cpp #naukaprogramowania
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MamCieNaHita: unique_ptr jest darmowy*, więc jeśli coś ma trzymać zasób, to właśnie za pomocą uniqueptr.
shared_ptr używasz, gdy potrzebujesz tej funkcjonalności (nie z lenistwa).

* tylko musisz rozważyć przypadek, gdy oparłeś kolejne gałęzie swojego
  • Odpowiedz
@nargil: a nie ma jakiegoś oodpowiednika sendmail? ;p wiem że trochę januszowo to cisnę, ale uczymy się ze znajomym kucem windows.h i keyloggera napisaliśmy ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Atraktor:

void getVal(int val)
{
    jakas_zmienna = val;
}
Co za herezja. Przedrostkiem get zazwyczaj oznaczamy getter czyli coś co pobiera i zwraca wartość. Używanie tego w innym kontekście to co najmniej zła praktyka.
  • Odpowiedz