Tablice C++

0

Witam mam pytanie czy da się zresetować wrzystkie elementy tablicy za jednym zamachem bez zbędnego wpisywania ich po kolei?
Z góry dziękuje

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
5
UN
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 7 lat
0

A jeśli chcesz wyzerować tablicę możesz po prostu napisać: int array[10]{};

hauleth
IMHO czytelniej jest int array[10] = {0};
vpiotr
Tak, o ile zresetować = zainicjować...
Azarien
@hauleth: nie mam teraz linka do artykułu pod ręką, ale takie {0} pod Visual C++ ponoć działa znacznie wolniej niż {}, jeśli wydajność ma znaczenie. {} jest zoptymalizowane tak że wypełniane jest nawet po 16 bajtów na raz (instrukcjami SSE2), podczas gdy {0} wypełnia pierwszy element pojedynczo, po czym reszta nie jest już odpowiednio wyrównana by zerować elemety tymi samymi instrukcjami co w przypadku {}.
carlosmay
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Pabianice
0
Kopiuj
#include <iostream>
#include <array>

int main()
{
    std::size_t constexpr size{ 10 };
    std::array<int, size> arr{};
    for (auto const& el : arr)
    {
        std::cout << el << ' ';
    }
}

wil
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 7 lat
0

Zazwyczaj takie coś robisz z pomocą funkcji, np. ZeroMemoty, memset, itp.

int *t = new int[milion];

zatem aby to wyzerować:
ZeroMemory(t, milion*sizeof(int));

abo od razu można użyć coś w stylu:
t = allocZero(milion);

a w windows nawet tak można:
t = GlobalAlloc(GMEM_ZEROINIT, milion);

carlosmay
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Pabianice
1

std::vector<> sam upora się z zerowaniem dużych dynamicznych tablic i pewnie nie będzie wolniejszy:

Kopiuj
std::size_t constexpr million{ 1000000 };
std::vector<int> millionNums(million);

edytowany 1x, ostatnio: carlosmay
Azarien
po co to constexpr?
carlosmay
Tak po prostu :) Rozmiar nie musi być stały, ale jak jest, też nic się nie stanie.
wil
  • Rejestracja:ponad 19 lat
  • Ostatnio:prawie 7 lat
0
carlosmay napisał(a):

std::vector<> sam upora się z zerowaniem dużych dynamicznych tablic i pewnie nie będzie wolniejszy:

Kopiuj
std::size_t constexpr million{ 1000000 };
std::vector<int> millionNums(million);

Będzie zdecydowanie wolniejszy.
Wszelkie te contenery z stl są wolniejsze od podstawowych - 'niskopoziomowych' funkcji.

kq
[citation needed]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.