Como converter de um coleção .NET em um contêiner STL/CLR
Este tópico mostra como converter coleções .NET a seus contêineres de equivalente STL/CLR. Como exemplo mostrarmos como converter um .NET List a um STL/CLR vetor e como converter um .NET Dictionary a um STL/CLR mapa, mas o procedimento é semelhante para todas as coleções e contêineres.
Para criar um contêiner de uma coleção
Para converter uma coleção inteira, crie um contêiner de STL/CLR e passar a coleção para o construtor.
O primeiro exemplo demonstra esse procedimento.
- OU-
Crie um contêiner genérico de STL/CLR criando um objeto de collection_adapter . Essa classe do modelo usa uma interface da coleção do .NET como um argumento. Para verificar se as interfaces são suportadas, consulte collection_adapter (STL/CLR).
Copiar o conteúdo da coleção de .NET para o contêiner. Isso pode ser feito usando um STL/CLR algoritmo, ou para iterar sobre a coleção de .NET e inserindo uma cópia de cada elemento no contêiner de STL/CLR.
O segundo exemplo demonstra esse procedimento.
Exemplo
Neste exemplo, criamos List genérico e adicionamos-lhe 5 elementos. Em seguida, criamos vector usando o construtor que usa IEnumerable 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 Dictionary genérico e adicionamos-lhe 5 elementos. Em seguida, criamos collection_adapter para incluir Dictionary como um contêiner simples de STL/CLR. Finalmente, criamos map e copiamos o conteúdo de Dictionary a map iterando sobre collection_adapter. Durante esse processo, criamos um novo par usando a função de make_pair , e inserimos os novos pares diretamente em 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 em uma coleção .NET