webentwicklung-frage-antwort-db.com.de

Wie lösche ich ein C++ - Array?

Wie lösche/leere ich ein C++ - Array? Theres array::fill , aber sieht aus wie sein C++ 11 nur? Ich benutze VC++ 2010. Wie kann ich es leeren (auf alle 0 zurücksetzen)?

5
Jiew Meng
std::fill_n(array, elementCount, 0);

Angenommen, array ist ein normales Array (z. B. int[])

20
Angew

Angenommen, ein Array im C-Stil a der Größe N mit Elementen eines Typs, die implizit aus 0 konvertiert werden können, setzt das Folgende alle Elemente auf Werte, die aus 0 erstellt wurden.

std::fill(a, a+N, 0);

Beachten Sie, dass dies nicht dasselbe ist wie "Leeren" oder "Löschen".

Edit : Nach dem Vorschlag von James Kanze könnten Sie in C++ 11 die idiomatischere Alternative verwenden

std::fill( std::begin( a ), std::end( a ), 0 );

In Abwesenheit von C++ 11 könnten Sie Ihre eigene Lösung wie folgt implementieren:

template <typename T, std::size_t N> T* end_(T(&arr)[N]) { return arr + N; }

template <typename T, std::size_t N> T* begin_(T(&arr)[N]) { return arr; }

std::fill( begin_( a ), end_( a ), 0 );
6
juanchopanza
std::fill(a.begin(),a.end(),0);

Hey ich denke, der schnellste Weg, um diese Art von Operation zu behandeln, ist memset () den Speicher.

Beispiel-

memset(&myPage.pageArray[0][0], 0, sizeof(myPage.pageArray));

Ein ähnlicher C++ Weg wäre die Verwendung von std :: fill

char *begin = myPage.pageArray[0][0];
char *end = begin + sizeof(myPage.pageArray);
std::fill(begin, end, 0);
0
riti

Wenn Sie das Array mit etwas anderem als einem Wert löschen möchten, schneidet std :: file es nicht aus. Stattdessen fand ich std :: generate nützlich. z.B. Ich hatte einen Vektor von Listen, die ich initialisieren wollte

std::generate(v.begin(), v.end(), [] () { return std::list<X>(); });

Sie können auch z.

std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });

oder nur

std::generate(v.begin(), v.end(), [] (){ return 0; });

ich stelle mir aber vor, dass std :: fill im einfachsten Fall schneller ist

0
Neil McGill