共用方式為


如何:從 .NET 集合轉換為 STL/CLR 容器

本主題說明如何將 .NET 集合轉換成其對等 STL/CLR 容器。 例如,我們示範如何將 .NET 轉換成 STL/CLR 向量,以及如何將 .NET Dictionary<TKey,TValue> List<T> 轉換成 STL/CLR 對應,但程式適用於所有集合和容器。

從集合建立容器

  1. 若要轉換整個集合,請建立 STL/CLR 容器,並將集合傳遞至建構函式。

    第一個範例示範此程式。

-或-

  1. 藉由建立collection_adapter物件,建立泛型 STL/CLR 容器。 此範本類別會採用 .NET 集合介面作為自變數。 若要確認支援哪些介面,請參閱 collection_adapter (STL/CLR)

  2. 將 .NET 集合的內容複製到容器。 這可以藉由使用 STL/CLR 演算法,或逐一查看 .NET 集合,並將每個元素的複本插入 STL/CLR 容器來完成。

    第二個範例示範此程式。

範例

在此範例中,我們會建立泛型 List<T> ,並將 5 個元素新增至其中。 然後,我們會使用採用 作為自變數的建構函式IEnumerable<T>來建立 vector

// 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

在此範例中,我們會建立泛型 Dictionary<TKey,TValue> ,並將 5 個元素新增至其中。 然後,我們會建立 collection_adapter ,將 包裝 Dictionary<TKey,TValue> 為簡單的 STL/CLR 容器。 最後,我們會藉由逐一map查看 collection_adapter來建立 ,並將 的內容Dictionary<TKey,TValue>map複製到 。 在此程式中,我們會使用 make_pair 函式建立新的配對,並將新配對直接插入 。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

另請參閱

STL/CLR 程式庫參考
adapter (STL/CLR)
如何:從 STL/CLR 容器轉換為 .NET 集合