Wpis z mikrobloga

#cpp #programowanie

Jak skleić kilka zmiennych typu bool w jedną typu char albo dłuższą?

bool* bo = new bool[10];
bo[0] = false;
bo[1] = true;
bo[2] = true;
bo[3] = true;
bo[4] = true;
bo[5] = true;
bo[8] = true;

Lub (lepiej)
Zapisać te zmienne do pliku bit po bicie a nie jedną na bajt.

Robiłem to pętlą i tak to wychodzi.

for(int x=0; x<3; x++) {
ofs.write((char*)(&bo[x]), sizeof(*bo));
}
  • 40
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • Doceń
@KrzaQ2: chyba nie bardzo rozumiem - stwierdziles, ze lepiej jest alokować std::vector na stosie niz tworzyc tablicę typow, bo std::vector automatycznie dba o pozbycie sie jego bufora - i to jest okej, ale jesli chcesz zapisać stan, ktory nie jest zależny od funkcji, to - chcesz nie chcesz - musisz alokować na stercie, od tego właśnie przeto masz new. Chyba, że coś pominąłem? :D
  • Odpowiedz
@KrzaQ2: No ale unique_ptr nadal potrzebuje w środku typ T*, nie myle się? Jak tutaj pominiesz new? :P
Jak dla mnie bardziej to brzmi jako ,,nie pracuj z nagimi wskaźnikami, bo bedziesz mial problemy z zarządzaniem pamięcią" ;)
  • Odpowiedz
@alex-fortune: Wut? Nie wiem skąd bierzesz informacje. make_unique ma problem właśnie z agregatami i gdy chcesz własny deleter. A co robi pod spodem nie ma znaczenia, istotne jest aby jawnie tego nie robić bez powodu.
  • Odpowiedz
@alex-fortune: od dłuższego czasu stosuję identyczne podejście jak @KrzaQ2 (a już myślałem, że tylko ja jestem taki mądry ;) ). Takie rozwiązanie niweluje naprawdę wiele problemów, szczególnie w dużych aplikacjach.
  • Odpowiedz