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

In diesem Thema wird gezeigt, wie .NET-Auflistungen in ihre entsprechenden STL/CLR-Container konvertiert werden. Als Beispiel zeigen wir, wie Ein .NET List<T> in einen STL/CLR-Vektor konvertiert und wie ein .NET Dictionary<TKey,TValue> in eine STL/CLR-Zuordnung konvertiert wird, die Vorgehensweise ist jedoch für alle Auflistungen und Container ähnlich.

So erstellen Sie einen Container aus einer Sammlung

  1. Um eine gesamte Auflistung zu konvertieren, erstellen Sie einen STL/CLR-Container, und übergeben Sie die Auflistung an den Konstruktor.

    Im ersten Beispiel wird diese Prozedur veranschaulicht.

ODER

  1. Erstellen Sie einen generischen STL/CLR-Container, indem Sie ein collection_adapter-Objekt erstellen. Diese Vorlagenklasse verwendet eine .NET-Sammlungsschnittstelle als Argument. Informationen zur Überprüfung, welche Schnittstellen unterstützt werden, finden Sie unter collection_adapter (STL/CLR).

  2. Kopieren Sie den Inhalt der .NET-Auflistung in den Container. Dazu können Sie einen STL/CLR-Algorithmus verwenden oder die .NET-Auflistung durchlaufen und eine Kopie der einzelnen Elemente in den STL/CLR-Container einfügen.

    Im zweiten Beispiel wird diese Prozedur veranschaulicht.

Beispiele

In diesem Beispiel erstellen wir ein generisches List<T> Element und fügen ihr fünf Elemente hinzu. Anschließend erstellen wir einen vector using-Konstruktor, der ein IEnumerable<T> 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);
    }
}
The contents of the cliext::vector are:
2
3
5
7
11

In diesem Beispiel erstellen wir ein generisches Dictionary<TKey,TValue> Element und fügen ihr fünf Elemente hinzu. Anschließend erstellen wir einen collection_adapter Umbruch Dictionary<TKey,TValue> als einfachen STL/CLR-Container. Schließlich erstellen wir einen map und kopieren den Inhalt des Dictionary<TKey,TValue>map Durchgehens über die collection_adapter. Während dieses Vorgangs erstellen wir ein neues Paar mithilfe der make_pair Funktion und fügen das neue Paar direkt in das map.

// 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);
    }
}
The contents of the cliext::map are:
Key: 0.00 Value: 0
Key: 13.00 Value: 13
Key: 22.00 Value: 22
Key: 42.00 Value: 42
Key: 74.00 Value: 74

Siehe auch

Referenz zur STL/CLR-Bibliothek
adapter (STL/CLR)
Vorgehensweise: Umwandeln eines STL/CLR-Containers in eine .NET-Auflistung