2. 配列を使う¶
2.1 配列¶
Array<T>
はT
型の配列です- 配列は 1 つの変数でたくさんの値を持つことができます
- 配列の中身は
Print << 配列;
やU"{}"_fmt(配列)
で調べることができます
# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
Font font{ FontMethod::MSDF, 48 };
// 6 つの要素を持つ配列
Array<int32> values = { 10, 20, 50, 100, 200, 500 };
while (System::Update())
{
font(U"values: {}"_fmt(values)).draw(20, 40, 40, Palette::Black);
}
}
2.2 配列への要素の追加¶
<<
を使って配列の末尾に要素を追加できます
# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
Font font{ FontMethod::MSDF, 48 };
// 最初は要素無し
Array<int32> values;
while (System::Update())
{
if (MouseL.down())
{
values << Random(0, 100);
}
font(U"values: {}"_fmt(values)).draw(20, 40, 40, Palette::Black);
}
}
2.3 配列の要素数¶
- 現在の配列の要素数は
.size()
で調べられます
# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
Font font{ FontMethod::MSDF, 48 };
Array<int32> values;
while (System::Update())
{
if (MouseL.down())
{
values << Random(0, 100);
}
font(U"values: {}"_fmt(values)).draw(20, 40, 40, Palette::Black);
font(U"要素数: {}"_fmt(values.size())).draw(20, 40, 80, Palette::Black);
}
}
2.4 配列の末尾の要素の削除¶
- 配列の末尾の要素を削除するには
.pop_back()
を使います - 配列の要素数が 0 のときに
.pop_back()
はできません
# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
Font font{ FontMethod::MSDF, 48 };
Array<int32> values;
while (System::Update())
{
if (MouseL.down())
{
values << Random(0, 100);
}
if (MouseR.down()
&& (0 < values.size())) // もし 1 個でも要素があれば
{
// 末尾の要素を削除する
values.pop_back();
}
font(U"values: {}"_fmt(values)).draw(20, 40, 40, Palette::Black);
font(U"要素数: {}"_fmt(values.size())).draw(20, 40, 80, Palette::Black);
}
}
2.5 配列のすべての要素の削除¶
- 配列のすべての要素を削除するには
.clear()
を使います - 配列の要素数が 0 のときに使っても何も起こりません
# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
Font font{ FontMethod::MSDF, 48 };
Array<int32> values;
while (System::Update())
{
if (MouseL.down())
{
values << Random(0, 100);
}
if (MouseR.down()
&& (0 < values.size())) // もし 1 個でも要素があれば
{
// 末尾の要素を削除する
values.pop_back();
}
if (KeySpace.down())
{
// すべての要素を削除する
values.clear();
}
font(U"values: {}"_fmt(values)).draw(20, 40, 40, Palette::Black);
font(U"要素数: {}"_fmt(values.size())).draw(20, 40, 80, Palette::Black);
}
}
2.6 範囲 for (const 参照)¶
- 次のような範囲 for 文で、配列のすべての要素にアクセスできます
# include <Siv3D.hpp>
void Main()
{
Array<int32> values = { 10, 20, 30, 40, 50, 60 };
for (const auto& value : values)
{
Print << (value * 2);
}
while (System::Update())
{
}
}
2.7 範囲 for (参照)¶
- 次のような範囲 for 文で、配列のすべての要素にアクセスでき、要素を変更できます
# include <Siv3D.hpp>
void Main()
{
Array<int32> values = { 10, 20, 30, 40, 50, 60 };
for (auto& value : values)
{
value += 2;
}
for (const auto& value : values)
{
Print << value;
}
while (System::Update())
{
}
}
2.8 範囲 for 内で、その配列に要素の追加と削除をしてはいけない¶
- 範囲 for 内で、その配列に対して要素の追加と削除をすることはできません
書いてはいけないコード(範囲 for 内でその配列に要素を追加している)