Compartilhar via


Como: converter de um.NET coleção em um contêiner STL/CLR

Este tópico mostra como converter.NET coleções para seus equivalentes contêineres STL/CLR.Como exemplo podemos mostrar como converter um.NET List<T> para um STL/CLR vetor e como converter um.NET Dictionary<TKey, TValue> para um STL/CLR mapa, mas o procedimento é semelhante para todas as coleções e recipientes.

Para criar um recipiente de uma coleção

  • Para converter uma coleção inteira, crie um contêiner STL/CLR e passe a coleção para o construtor.

    O primeiro exemplo demonstra esse procedimento.

-OU-

  1. Criar um contêiner STL/CLR genérico, criando um collection_adapter objeto.Essa classe de modelo um.Interface de coleção NET como um argumento.Para verificar quais interfaces são suportados, consulte collection_adapter (STL/CLR).

  2. Copie o conteúdo da.Coleção de líquido para o recipiente.Isso pode ser feito usando um STL/CLR algoritmo, ou por iterando o.NET coleção e inserir uma cópia de cada elemento no contêiner STL/CLR.

    O segundo exemplo demonstra esse procedimento.

Exemplo

Neste exemplo, criamos um genérico List<T> e adicionar 5 elementos.Em seguida, criamos um vector usando o construtor que leva um IEnumerable<T> como um argumento.

// 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);
    }
}
  

Neste exemplo, criamos um genérico Dictionary<TKey, TValue> e adicionar 5 elementos.Em seguida, criamos um collection_adapter quebra a Dictionary<TKey, TValue> como um simple contêiner STL/CLR.Finalmente, criamos um map e copiar o conteúdo do Dictionary<TKey, TValue> para o map por iterando o collection_adapter.Durante esse processo, podemos criar um novo par usando o make_pair de função e inserir o novo par diretamente para o 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);
    }
}
  

Consulte também

Tarefas

Como: converter de um contêiner STL/CLR para um.Coleção NET

Referência

adaptador (STL/CLR)

Outros recursos

Referência de biblioteca STL/CLR