Freigeben über


Gewusst wie: Umwandeln einer .Net-Auflistung in einen STL/CLR-Container

Dieses Thema zeigt, wie .NET-Auflistungen ihren Containern der Entsprechung STL/CLR konvertiert. Als Beispiel zeigen wir uns, wie .NET List zu einem STL/CLR Vektor konvertiert und wie .NET Dictionary zu einem STL/CLR Zuordnung konvertiert, die Verfahren für alle Sammlungen und Container ähnlich.

Erstellen eines Containers aus einer Auflistung erstellen

  • Um eine vollständige Auflistung konvertiert, erstellen Sie einen CLR-Container STL/erstellt und übergeben Sie die Auflistung an den Konstruktor.

    Im ersten Beispiel wird diese Prozedur.

– ODER –

  1. Erstellen eines generischen STL/CLR-Container erstellt, indem Sie ein Objekt erstellen. collection_adapter Diese Vorlagenklasse verwendet eine .NET-Auflistungsschnittstelle als Argument. Um sicherzustellen welche Schnittstellen unterstützt werden, finden Sie unter collection_adapter (STL/CLR).

  2. Kopieren Sie den Inhalt der .NET-Auflistung bin. Dies kann durchgeführt werden, indem ein STL/CLR mithilfe von Algorithmus oder über die .NET-Auflistung durchläuft und eine Kopie jedes Elements in STL/CLR-Container einfügt.

    Im zweiten Beispiel wird diese Prozedur.

Beispiel

In diesem Beispiel erstellen wir generisches List und fügen 5 Elemente hinzu. Anschließend erstellen Sie vector mit dem Konstruktor, der IEnumerable als Argument verwendet.

// cliext_convert_list_to_vector.cpp
// compile with: /clr

#include <cliext/adapter>
#include <cliext/algorithm>
#include <cliext/vector>

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;

int main(array<System::String ^> ^args)
{
    List<int> ^primeNumbersColl = gcnew List<int>();
    primeNumbersColl->Add(2);
    primeNumbersColl->Add(3);
    primeNumbersColl->Add(5);
    primeNumbersColl->Add(7);
    primeNumbersColl->Add(11);

    cliext::vector<int> ^primeNumbersCont =
        gcnew cliext::vector<int>(primeNumbersColl);

    Console::WriteLine("The contents of the cliext::vector are:");
    cliext::vector<int>::const_iterator it;
    for (it = primeNumbersCont->begin(); it != primeNumbersCont->end(); it++)
    {
        Console::WriteLine(*it);
    }
}
  

In diesem Beispiel erstellen wir generisches Dictionary und fügen 5 Elemente hinzu. Anschließend erstellen Sie collection_adapter, um Dictionary als einfacher STL/CLR-Container zu umschließen. Zuletzt erstellen wir map und kopiert den Inhalt von Dictionary in map, indem der zum collection_adapter durchlaufen. Während dieses Prozesses erstellen Sie ein neues Paar, indem wir die Funktion make_pair verwenden, und fügen die neuen Paare direkt in map ein.

// cliext_convert_dictionary_to_map.cpp
// compile with: /clr

#include <cliext/adapter>
#include <cliext/algorithm>
#include <cliext/map>

using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;

int main(array<System::String ^> ^args)
{
    System::Collections::Generic::Dictionary<float, int> ^dict =
        gcnew System::Collections::Generic::Dictionary<float, int>();
    dict->Add(42.0, 42);
    dict->Add(13.0, 13);
    dict->Add(74.0, 74);
    dict->Add(22.0, 22);
    dict->Add(0.0, 0);

    cliext::collection_adapter<System::Collections::Generic::IDictionary<float, int>> dictAdapter(dict);
    cliext::map<float, int> aMap;
    for each (KeyValuePair<float, int> ^kvp in dictAdapter)
    {
        cliext::pair<float, int> aPair = cliext::make_pair(kvp->Key, kvp->Value);
        aMap.insert(aPair);
    }

    Console::WriteLine("The contents of the cliext::map are:");
    cliext::map<float, int>::const_iterator it;
    for (it = aMap.begin(); it != aMap.end(); it++)
    {
        Console::WriteLine("Key: {0:F} Value: {1}", it->first, it->second);
    }
}
  

Siehe auch

Aufgaben

Gewusst wie: Umwandeln eines STL/CLR-Containers in eine .NET-Auflistung

Referenz

adapter (STL/CLR)

Weitere Ressourcen

Referenz zur STL/CLR-Bibliothek