Partager via


Comment : Convertissez d'une collection.NET dans un conteneur STL/CLR

Cette rubrique explique comment convertir des collections.NET à leur conteneur STL/CLR équivalents.Comme exemple nous affichons comment convertir un .NET List<T> à un STL/CLR vecteur et comment convertir un .NET Dictionary<TKey, TValue> à un STL/CLR carte, mais la procédure est identique pour tous les collections et conteneurs.

Pour créer un conteneur d'une collection

  • Pour convertir une collection complète, créez un conteneur STL/CLR et passez la collection au constructeur.

    Le premier exemple montre cette procédure.

- OU -

  1. 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 les interfaces sont prises en charge, consultez collection_adapter (STL/CLR).

  2. Copiez le contenu de la collection.NET au conteneur.Cette opération peut être effectuée à l'aide d'un STL/CLR algorithme, ou en itérant au sein de la collection.NET et en insérant une copie de chaque élément dans le conteneur STL/CLR.

    Le deuxième exemple montre cette procédure.

Exemple

Dans cet exemple, nous créons un générique List<T> et ajoutons 5 éléments.Ensuite, vous allez vector à l'aide de le constructeur qui prend IEnumerable<T> 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 générique Dictionary<TKey, TValue> et ajoutons 5 éléments.Ensuite, vous allez collection_adapter pour encapsuler Dictionary<TKey, TValue> comme conteneur STL/CLR simple.Enfin, vous allez map et copions le contenu d' Dictionary<TKey, TValue> à map en itérant au sein de collection_adapter.Pendant ce processus, nous créons une paire à l'aide de la fonction d' 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 : Conversion d'un conteneur STL/CLR à une collection.NET

Référence

adapter (STL/CLR)

Autres ressources

Référence de bibliothèque STL/CLR