Ich habe eine 2-dimensionale von s und ich möchte es mit 0s füllen. Die einzige Lösung für dieses Problem, die ich gefunden ist, einen Zeiger auf das erste Element zu verwenden und sizeof
, etwa so:Was ist der STL-Weg, um ein 2-dimensionales std :: -Array ohne Iteration zu füllen?
std::fill(&arr2d[0][0], &arr2d[0][0] + sizeof(arr2d), 0);
Obwohl es funktioniert, ist die Leitung nicht mit anderen Methoden bis ich zum Befüllen 1D gefunden habe std::array
s ohne Zeigerlogik, wie die beiden folgenden:
std::fill(arr1d.begin(), arr1d.end(), 0);
arr1d.fill(0);
konnte ich über jedem Array durchlaufen, etwa so:
for (auto& it : arr2d) {
it.fill(0);
}
aber es scheint, wäre es viel mo Es ist effizient, das Array in einem Durchgang zu füllen. Gibt es eine sauberere Methode für 2D-Arrays oder bleibe ich bei der C-style-Pointer-Logik?
Warum nehmen Sie 'std :: fill' nicht eine ähnliche Schleife rollen. Wenn Sie mit Nullen füllen möchten, könnte 'std :: memset' verwendet werden. – DeiDei
@DeiDei Eines meiner Ziele für meine C++ Programmierung ist die Vermeidung von C-style Logik wie 'memset'. Ich gehe nicht davon aus, dass 'std :: fill' oder' std :: memset' eine Schleife wie mein Beispiel rollen wird oder nicht. Ich vertraue darauf, dass die Implementierungsentwickler bessere Programmierer sind als ich und Optimierungen nach Bedarf vorgenommen haben. – robbie0630
1. Was ist der Array-Elementtyp? 2. fülle mit 0s oder mit einem beliebigen Wert? –