Im Allgemeinen gibt es std::fill
. Ссылка
Oder in diesem speziellen Fall sollten Sie in Betracht ziehen, std::vector<char>
zu verwenden.
(Beachten Sie, dass memset
weiterhin in C ++ verwendet werden kann, wenn Sie #include <cstring>
verwenden, obwohl es in C ++ weniger idiomatisch ist.)
Ein möglicher Ersatz für memset
bei einem Array von Objekttypen ist die Verwendung des Algorithmus std::fill
. Es funktioniert mit Iterator-Bereichen und auch mit Zeigern in Arrays.
memcpy
Aufrufe können normalerweise durch Aufrufe von std::copy
ersetzt werden.
z.B.
%Vor% memset
und memcpy
sind immer noch da und können bei Bedarf verwendet werden. Es ist wahrscheinlich ein größeres No-No aus der Sicht vieler C ++ - Entwickler, ein rohe new
zu verwenden und kein ressourcenverwaltendes Objekt zu verwenden. Es ist viel besser, ein std::string
oder ein std::vector<char>
zu verwenden, so dass die Speicherfreigabe automatisch erfolgt und der Code ausnahmslos sicherer ist.
Ich verstehe, dass es ein Nein ist, memcpy und memset zu verwenden, aber ich habe nicht genau verstanden, wie man das in C ++ verwendet, vorzugsweise ohne Std.
Es ist nicht no-no, memcpy
und memset
zu verwenden, wenn ihre Verwendung angemessen ist. Warum sollte es sein?
Es gibt std::copy
in C ++, das einen Satz von Elementen von einem Iterator in einen anderen kopiert (funktioniert in jedem Typ und nicht nur in char*
).
Abgesehen von der Unannehmlichkeit, manuell kopieren zu müssen und die gesamte Speicherzuordnung selbst vorzunehmen, ist dieser C ++ - Code nicht falsch.
Ich würde jedoch die Verwendung von std::string
für die String-Manipulation in C ++ dringend empfehlen.
Um von a nach b zu kopieren, nehmen Sie std::copy(src_start,src_end,dest_start)
, was src_start
inkrementiert, und kopiert es zum nächsten Zielelement, bis src_start==src_end
erreicht ist.
.. außer es funktioniert auch für Nicht-PODs, und Sie müssen nicht mit Byte-Längen verwirren, wenn ein einzelnes Element mehr als ein Byte ist.
Wenn Sie jedoch nur eine Zeichenfolgenmanipulation durchführen möchten, wird die std::string
-Klasse (und std::wstring
für breite Zeichenfolgen) bereitgestellt. Verkettung ist so einfach wie:
Nichts hält Sie davon ab, die strxxx
-Familie von Funktionen in C ++ zu verwenden, aber ich würde Ihnen wärmstens empfehlen, zu std::string
und Rest der STL zu wechseln. Es ist auch nicht perfekt, aber viel weniger fehleranfällig.