Comment : convertir une collection .NET en conteneur STL/CLR
Cette rubrique montre comment convertir des collections .NET en conteneurs STL/CLR équivalents. Par exemple, nous montrons comment convertir un .NET List<T> en vecteur STL/CLR et comment convertir un .NET Dictionary<TKey,TValue> en mappage STL/CLR, mais la procédure est similaire pour toutes les collections et conteneurs.
Pour créer un conteneur à partir d’une collection
Pour convertir une collection entière, créez un conteneur STL/CLR et transmettez la collection au constructeur.
Le premier exemple illustre cette procédure.
- ou -
Créez un conteneur STL/CLR générique en créant un objet collection_adapter . Cette classe de modèle prend une interface de collection .NET comme argument. Pour vérifier les interfaces prises en charge, consultez collection_adapter (STL/CLR).
Copiez le contenu de la collection .NET dans le conteneur. Pour ce faire, utilisez un algorithme STL/CLR ou en itérant sur la collection .NET et en insérant une copie de chaque élément dans le conteneur STL/CLR.
Le deuxième exemple illustre cette procédure.
Exemples
Dans cet exemple, nous créons un générique List<T> et y ajoutons 5 éléments. Ensuite, nous créons un vector
constructeur qui accepte un IEnumerable<T> 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
Dans cet exemple, nous créons un générique Dictionary<TKey,TValue> et y ajoutons 5 éléments. Ensuite, nous créons un collection_adapter
wrapper Dictionary<TKey,TValue> comme conteneur STL/CLR simple. Enfin, nous créons un map
contenu et copiez le contenu de l’objet Dictionary<TKey,TValue>map
en itérant sur le collection_adapter
. Pendant ce processus, nous créons une nouvelle paire à l’aide de la make_pair
fonction et insérons la nouvelle paire directement dans le 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
Voir aussi
Référence de bibliothèque STL/CLR
adapter (STL/CLR)
Guide pratique pour convertir un conteneur STL/CLR en collection .NET
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour