Comment : Convertissez d'une collection.NET dans un conteneur STL/CLR
Cette rubrique indique comment convertir des collections .NET vers les conteneurs STL/CLR équivalents. Comme exemple nous indiquons comment convertir un fournisseur .NET List en un vecteur STL/CLR et comment convertir un fournisseur .NET Dictionary en un mappage STL/CLR , mais la procédure est similaire pour toutes les collections et conteneurs.
Pour créer un conteneur depuis une collection
Pour convertir une collection entière, créez un conteneur STL/CLR et transmettez la collection au constructeur.
Le premier exemple montre cette procédure.
- OU -
Créez un conteneur STL/CLR générique en créant un objet de collection_adapter. Cette classe de modèle prend une interface de collection .NET comme argument. Pour vérifier quelles interfaces sont prises en charge, consultez collection_adapter (STL/CLR).
Copiez le contenu de la collection .NET dans le conteneur. Cela peut être accompli en utilisant un algorithme STL/CLR, ou en itérant au sein de la collection .NET et en insérant une copie de chaque élément dans le conteneur STL ou CLR.
Cette procédure est illustrée dans le deuxième exemple.
Exemple
Dans cet exemple, nous créons un List générique et ajoutons 5 éléments à celui-ci. Ensuite, nous créons un vector à l'aide du constructeur qui prend IEnumerable comme 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);
}
}
Dans cet exemple, nous créons un Dictionary générique et ajoutons 5 éléments à celui-ci. Ensuite, nous créons un collection_adapter pour encapsuler Dictionary comme un simple conteneur STL/CLR. Enfin, nous créons un map et copions le contenu du Dictionary dans map en l'itérant sur le collection_adapter. Pendant ce processus, nous créons une nouvelle paire à l'aide de la fonction make_pair, et insérons les nouvelles paires directement dans 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);
}
}
Voir aussi
Tâches
Comment : Convertissez un conteneur STL/CLR à une collection.NET