Heim >Backend-Entwicklung >C++ >Wie initialisiere ich ein nicht standardmäßiges konstruierbares „std::array' ohne Wiederholung in C?

Wie initialisiere ich ein nicht standardmäßiges konstruierbares „std::array' ohne Wiederholung in C?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 03:31:02705Durchsuche

How to Initialize a Non-Default Constructible `std::array` Without Repetition in C  ?

Nicht standardmäßiges konstruierbares std::array ohne Wiederholung initialisieren

In C wird ein std::array nicht standardmäßiger konstruierbarer Elemente initialisiert kann eine Herausforderung sein. Standardinitialisierungsmethoden werden umständlich, wenn n, die Array-Größe, groß oder ein Vorlagenparameter ist.

Lösung:

Eine elegante Lösung nutzt eine Kombination aus Iteratoren und Vorlagen. So funktioniert es:

Wir definieren zwei Hilfsprogramme:

  • genseq_t generiert eine Folge von ganzen Zahlen [0, 1, ..., n-1 ].
  • repeat erstellt ein Array, indem ein bestimmter Wert so oft wiederholt wird.

Mit diesen Dienstprogrammen können wir das std::array initialisieren in der Vorlagenfunktion f wie folgt:

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>

Implementierungsdetails:

  • genseq_t: Es verwendet variadische Vorlagen, um eine zu erstellen Folge von Ganzzahlen bis zu n.
  • Wiederholung: Diese Funktion entpackt die von genseq_t generierte Folge und erstellt das Array, indem sie T(N, Wert) für jede Ganzzahl in der Folge aufruft.

Beispiel:

Betrachten Sie eine Initialisierung mit dem Wert als Ganzzahl und n als Vorlagenparameter:

<code class="cpp">void f(int value)
{
    std::array<T, 5> items = repeat(value, genseq_t<5>{});
}</code>

Hier werden Elemente angezeigt Initialisiert mit fünfmal wiederholtem Wert: {Wert, Wert, Wert, Wert, Wert}.

Vorteile:

Dieser Ansatz ist prägnanter, insbesondere wenn n ist groß. Dadurch entfällt auch die Notwendigkeit, den Wert manuell zu wiederholen.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein nicht standardmäßiges konstruierbares „std::array' ohne Wiederholung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn