Porady: konwertowanie kolekcji .NET na kontener STL/CLR
W tym temacie przedstawiono sposób konwertowania kolekcji platformy .NET na równoważne kontenery STL/CLR. Na przykład pokazano, jak przekonwertować platformę .NET List<T> na wektor STL/CLR i jak przekonwertować platformę .NET Dictionary<TKey,TValue> na mapę STL/CLR, ale procedura jest podobna dla wszystkich kolekcji i kontenerów.
Aby utworzyć kontener na podstawie kolekcji
Aby przekonwertować całą kolekcję, utwórz kontener STL/CLR i przekaż kolekcję do konstruktora.
W pierwszym przykładzie przedstawiono tę procedurę.
-LUB-
Utwórz ogólny kontener STL/CLR, tworząc obiekt collection_adapter . Ta klasa szablonu przyjmuje interfejs kolekcji .NET jako argument. Aby sprawdzić, które interfejsy są obsługiwane, zobacz collection_adapter (STL/CLR).
Skopiuj zawartość kolekcji .NET do kontenera. Można to zrobić przy użyciu algorytmu STL/CLR lub iterując w kolekcji .NET i wstawiając kopię każdego elementu do kontenera STL/CLR.
W drugim przykładzie przedstawiono tę procedurę.
Przykłady
W tym przykładzie utworzymy ogólny List<T> i dodamy do niego 5 elementów. Następnie tworzymy vector
przy użyciu konstruktora, który przyjmuje IEnumerable<T> jako argument.
// 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
W tym przykładzie utworzymy ogólny Dictionary<TKey,TValue> i dodamy do niego 5 elementów. Następnie utworzymy element w collection_adapter
celu opakowania Dictionary<TKey,TValue> jako prostego kontenera STL/CLR. Na koniec utworzymy element map
i skopiujemy zawartość Dictionary<TKey,TValue> obiektu do map
obiektu, iterując na obiekcie collection_adapter
. Podczas tego procesu utworzymy nową parę przy użyciu make_pair
funkcji i wstawimy nową parę bezpośrednio do klasy 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
Zobacz też
Dokumentacja biblioteki STL/CLR
adapter (STL/CLR)
Instrukcje: konwertowanie kontenera STL/CLR na kolekcję .NET
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla