Jak: převod z.NET kolekce STL/CLR kontejneru
Toto téma uvádí, jak převést.NET kolekcí jejich obaly rovnocenné STL/CLR.Jako příklad můžeme ukázat, jak převést.NET List<T> do STL/CLR vector a jak převést.NET Dictionary<TKey, TValue> do STL/CLR mapy, ale postup je podobný pro všechny kolekce a kontejnery.
Vytvořit kontejner z kolekce
Chcete-li převést celou kolekci vytvořit kontejner STL/CLR a kolekce předat konstruktoru.
První příklad ukazuje postup.
-NEBO-
Vytvořit obecný kontejner STL/CLR vytvořením collection_adapter objektu.Tato třída šablony.Rozhraní kolekce NET jako argument.Ověřování rozhraní, která jsou podporovány, naleznete v části collection_adapter (STL/CLR).
Zkopírujte obsah.NET kolekce do kontejneru.To lze provést pomocí STL/CLR algoritmus, nebo pomocí iterace.NET shromažďování a vkládání kopii každého prvku do kontejneru STL/CLR.
Druhý příklad ukazuje postup.
Příklad
V tomto příkladu jsme vytvořit obecný List<T> a přidat do ní 5 prvky.Pak můžeme vytvářet vector pomocí konstruktoru, že trvá 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);
}
}
V tomto příkladu jsme vytvořit obecný Dictionary<TKey, TValue> a přidat do ní 5 prvky.Pak vytvořte jsme collection_adapter zalomení Dictionary<TKey, TValue> jako jednoduchý kontejner STL/CLR.Nakonec jsme vytvořit map a zkopírujte obsah Dictionary<TKey, TValue> do map pomocí iterace collection_adapter.Během tohoto procesu doporučujeme vytvořit novou dvojici make_pair funkce a vložit nový pár přímo do 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);
}
}
Viz také
Úkoly
Jak: převod z kontejneru STL/CLR.NET kolekce