Heim  >  Artikel  >  Backend-Entwicklung  >  Wie übergebe ich ein std::array unbekannter Größe an eine Funktion in C?

Wie übergebe ich ein std::array unbekannter Größe an eine Funktion in C?

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 19:04:301012Durchsuche

How to Pass an std::array of Unknown Size to a Function in C  ?

Ein std::array unbekannter Größe an eine Funktion übergeben

Wie kann man in C eine Funktion erstellen, die einen std akzeptiert: :array eines bekannten Typs, aber unbekannter Größe?

Betrachten Sie das folgende Beispiel:

<code class="cpp">void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

Mit dieser Funktion können Sie std::arrays unterschiedlicher Größe erstellen und diese an übergeben mulArray:

<code class="cpp">std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>

Gibt es eine einfachere Möglichkeit, dies zu erreichen, ähnlich der Verwendung einfacher Arrays im C-Stil?

Nein, das ist nicht möglich Betrieb ohne Verwendung von Funktionsvorlagen oder alternativen Containern wie std::vector.

Funktionsvorlagen-Lösung

Um eine generische Funktion zu erstellen, die std::arrays jeder Größe verarbeiten kann , müssen Sie eine Funktionsvorlage verwenden:

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

Diese Vorlage definiert eine Funktion, die ein Array von Ganzzahlen beliebiger Größe akzeptiert und jedes Element mit dem angegebenen Multiplikator multipliziert.

Ein Live-Beispiel dieser Implementierung finden Sie hier: [Live-Beispiel](https://godbolt.org/z/Y932XW)

Das obige ist der detaillierte Inhalt vonWie übergebe ich ein std::array unbekannter Größe an eine Funktion 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