Cara: Mengonversi dari Kontainer STL/CLR ke Koleksi .NET
Topik ini menunjukkan cara mengonversi kontainer STL/CLR ke koleksi .NET yang setara. Sebagai contoh, kami menunjukkan cara mengonversi vektor STL/CLR ke .NET ICollection<T> dan cara mengonversi peta STL/CLR ke .NET IDictionary<TKey,TValue>, tetapi prosedurnya mirip untuk semua koleksi dan kontainer.
Untuk membuat koleksi dari kontainer
Pilih salah satu metode berikut:
Untuk mengonversi bagian dari kontainer, panggil fungsi make_collection , dan teruskan iterator mulai dan iterator akhir kontainer STL/CLR untuk disalin ke dalam koleksi .NET. Templat fungsi ini mengambil iterator STL/CLR sebagai argumen templat. Contoh pertama menunjukkan metode ini.
Untuk mengonversi seluruh kontainer, transmisikan kontainer ke antarmuka koleksi .NET atau koleksi antarmuka yang sesuai. Contoh kedua menunjukkan metode ini.
Contoh
Dalam contoh ini, kami membuat STL/CLR vector
dan menambahkan 5 elemen ke dalamnya. Kemudian, kami membuat koleksi .NET dengan memanggil make_collection
fungsi . Terakhir, kami menampilkan konten koleksi yang baru dibuat.
// cliext_convert_vector_to_icollection.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/vector>
using namespace cliext;
using namespace System;
using namespace System::Collections::Generic;
int main(array<System::String ^> ^args)
{
cliext::vector<int> primeNumbersCont;
primeNumbersCont.push_back(2);
primeNumbersCont.push_back(3);
primeNumbersCont.push_back(5);
primeNumbersCont.push_back(7);
primeNumbersCont.push_back(11);
System::Collections::Generic::ICollection<int> ^iColl =
make_collection<cliext::vector<int>::iterator>(
primeNumbersCont.begin() + 1,
primeNumbersCont.end() - 1);
Console::WriteLine("The contents of the System::Collections::Generic::ICollection are:");
for each (int i in iColl)
{
Console::WriteLine(i);
}
}
The contents of the System::Collections::Generic::ICollection are:
3
5
7
Dalam contoh ini, kami membuat STL/CLR map
dan menambahkan 5 elemen ke dalamnya. Kemudian, kita membuat .NET IDictionary<TKey,TValue> dan menetapkan langsung map
ke dalamnya. Terakhir, kami menampilkan konten koleksi yang baru dibuat.
// cliext_convert_map_to_idictionary.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/map>
using namespace cliext;
using namespace System;
using namespace System::Collections::Generic;
int main(array<System::String ^> ^args)
{
cliext::map<float, int> ^aMap = gcnew cliext::map<float, int>;
aMap->insert(cliext::make_pair<float, int>(42.0, 42));
aMap->insert(cliext::make_pair<float, int>(13.0, 13));
aMap->insert(cliext::make_pair<float, int>(74.0, 74));
aMap->insert(cliext::make_pair<float, int>(22.0, 22));
aMap->insert(cliext::make_pair<float, int>(0.0, 0));
System::Collections::Generic::IDictionary<float, int> ^iDict = aMap;
Console::WriteLine("The contents of the IDictionary are:");
for each (KeyValuePair<float, int> ^kvp in iDict)
{
Console::WriteLine("Key: {0:F} Value: {1}", kvp->Key, kvp->Value);
}
}
The contents of the IDictionary 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
Lihat juga
Referensi Pustaka STL/CLR
Cara: Mengonversi dari Koleksi .NET ke Kontainer STL/CLR
range_adapter (STL/CLR)