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
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
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).
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