Sdílet prostřednictvím


Postupy: Převod typu .NET Collection na kontejner STL/CLR

Toto téma ukazuje, jak převést kolekce .NET na jejich ekvivalentní kontejnerů STL/CLR.Jako příklad nám ukazují, jak převést .NET List na STL/CLR vector a jak převést .NET Dictionary na STL/CLR mapy, ale postup je podobný pro všechny kolekce a kontejnery.

Chcete-li vytvořit kontejner z kolekce

  • Chcete-li převést celou kolekci, vytvořit kontejner STL/CLR a předejte tuto kolekci v konstruktoru.

    První příklad ukazuje postup.

-NEBO-

  1. Vytvořením vytvořit obecný kontejner STL/CLR collection_adapter objektu.Tuto šablonu třídy kolekcí rozhraní .NET přijímá jako argument.Chcete-li ověřit, která rozhraní jsou podporovány, naleznete v collection_adapter (STL/CLR).

  2. Zkopírujte obsah kolekce .NET do kontejneru.To lze provést pomocí STL/CLR algoritmus, nebo pomocí iterace v kolekci .NET a vložení kopie každého prvku kontejneru STL/CLR.

    Druhý příklad ukazuje postup.

Příklad

V tomto příkladu jsme vytvořit obecný List a přidejte do něj 5 prvky.Poté vytvoříme vector pomocí konstruktoru, který přijímá IEnumerable jako 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);
    }
}
  

V tomto příkladu jsme vytvořit obecný Dictionary a přidejte do něj 5 prvky.Poté vytvoříme collection_adapter zalomení Dictionary jako jednoduchý kontejner STL/CLR.Nakonec vytvoříme map a zkopírovat obsah Dictionary k map pomocí iterace collection_adapter.Během tohoto procesu pomocí vytvoříme nový pár make_pair funkce a vložit nový pár přímo do 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);
    }
}
  

Viz také

Úkoly

Postupy: Převod kontejneru STL/CLR na typ .NET Collection

Referenční dokumentace

adapter (STL/CLR)

Další zdroje

STL/CLR – Referenční dokumentace knihoven