Listの使い方
公開日:
更新日:
ここでは, Listの基本的な使い方を説明します. 各説明項目は以下のとおりです.
- 使用例
- C#との相違点
- Sortについて
使用例
ここでは, 作成したlistに0~1023まで数値を代入して結果を表示してみたいと思います.
#include "List.h"
#include <stdio.h>
int main()
{
//インスタンス生成
//容量は500に設定
List<int> list(500);
for(int i = 0; i < 1024; i++)
{
//追加
//容量を超えると自動で確保される
list.Add(i);
}
//結果表示
//0~1023が表示される
for(int i = 0; i < list.Count(); i++)
{
printf("%d\n", list[i]);
}
return 0;
}
C#との相違点
このListはC#のListと一部異なるところがあります. C#とC++は言語が違うからです. 以下にその違いを書いていきます.
インスタンス生成
まず, 実際にスクリプトを見てみます.
- C#の場合
List<int> list = new List<int>();
- C++の場合
//ヒープ領域に確保する場合
List<int> *listA = new List<int>();
//スタック領域に確保する場合
List<int> listB();
C#では参照型オブジェクトの実体を作るには必ずnewしなければいけませんが, C++はそうするとは限りません.
参照と値
まず, 実際にスクリプトを見てみます. 代入を考えます.
- C#の場合
//参照がコピーされます
listA = listB;
- C++の場合
//値がコピーされます
listA = listB
上のコードは文字として一緒ですが, 動作が異なります. C#は参照がコピーされますが, C++は値がコピーされます. これは, C++とC#の仕様が異なるためです. C#において, クラスの変数には参照値―メモリアドレス値(Cでいうとポインタ)―が格納されます. この場合C++の方が処理に時間がかかることになります.
Sortについて
Sort関数を使う際, 順序比較のための関数’Comparison’を用意する必要があります. このComparisonは次の形式を満たす必要があります.
//Comparisonについて:
// 返り値:
// 0より小さい:
// 並び替え順序においてAはBの前
//
// 0:
// 並び替え順序においてAとBは同じ位置
//
// 0より大きい:
// 並び替え順序においてAはBの後ろ
int(*comparison)(TYPE, TYPE);
実際にint型のための比較関数は以下のようになるでしょう.
int compare(int a, int b)
{
return a - b;
}
これらを踏まえ簡単なサンプルを示します.
#include "List.h"
#include <iostream>
using namespace std;
int compare(int a, int b)
{
return a - b;
}
int main()
{
List<int>list;
list.Add(3);
list.Add(6);
list.Add(7);
list.Add(9);
list.Add(-1);
list.Add(-1);
list.Add(-4);
list.Add(2424);
list.Add(7676);
list.Add(23);
for (int i = 0; i < list.Count(); i++)
{
std::cout << list[i] << "\n";
}
std::cout << "***並び替え後\n";
list.Sort(compare);
for (int i = 0; i < list.Count(); i++)
{
std::cout << list[i] << "\n";
}
return 0;
}
/*
実行結果
3
6
7
9
-1
-1
-4
2424
7676
23
***並び替え後
-4
-1
-1
3
6
7
9
23
2424
7676
*/