Enumerations and State
Enum Arrays
An enum can choose a label from an array when its values are compact.
enum index
Casting a compact enum to an integer can select related data from an array.
Enum Arrays
enum_arrays.cpp
Replay: real traced execution (multi-file project)
#include <array>
#include <iostream>
#include <string>
enum class Day {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday
};
int main() {
Day day = Day::Wednesday;
std::array<std::string, 5> labels{"Mon", "Tue", "Wed", "Thu", "Fri"};
std::array<int, 5> tasks{2, 3, 4, 3, 1};
int index = static_cast<int>(day);
std::cout << "day=" << labels[index] << std::endl;
std::cout << "tasks=" << tasks[index] << std::endl;
return 0;
}
#include <array>
#include <iostream>
#include <string>
enum class Day {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday
};
int main() {
Day day = Day::Monday;
std::array<std::string, 5> labels{"Mon", "Tue", "Wed", "Thu", "Fri"};
std::array<int, 5> tasks{2, 3, 4, 3, 1};
int index = static_cast<int>(day);
std::cout << "day=" << labels[index] << std::endl;
std::cout << "tasks=" << tasks[index] << std::endl;
return 0;
}
#include <array>
#include <iostream>
#include <string>
enum class Day {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday
};
int main() {
Day day = Day::Friday;
std::array<std::string, 5> labels{"Mon", "Tue", "Wed", "Thu", "Fri"};
std::array<int, 5> tasks{2, 3, 4, 3, 1};
int index = static_cast<int>(day);
std::cout << "day=" << labels[index] << std::endl;
std::cout << "tasks=" << tasks[index] << std::endl;
return 0;
}
day ← 2, labels ← (empty), tasks ← (empty), index ← 2
13int main() {14 Day day→ 2 = Day::Wednesday; //@day=Day::Monday, Day::Friday15 std::array<std::string, 5> labels→ (empty){"Mon", "Tue", "Wed", "Thu", "Fri"};16 std::array<int, 5> tasks→ (empty){2, 3, 4, 3, 1};1718 int index→ 2 = static_cast<int>(day2);1920 std::cout << "day=" << labels(empty)[index2] << std::endl;21 std::cout << "tasks=" << tasks(empty)[index2] << std::endl;22 return 0;23}outputday=Wed tasks=4
day ← 0, labels ← (empty), tasks ← (empty), index ← 0
13int main() {14 Day day→ 0 = Day::Monday;15 std::array<std::string, 5> labels→ (empty){"Mon", "Tue", "Wed", "Thu", "Fri"};16 std::array<int, 5> tasks→ (empty){2, 3, 4, 3, 1};1718 int index→ 0 = static_cast<int>(day0);1920 std::cout << "day=" << labels(empty)[index0] << std::endl;21 std::cout << "tasks=" << tasks(empty)[index0] << std::endl;22 return 0;23}outputday=Mon tasks=2
day ← 4, labels ← (empty), tasks ← (empty), index ← 4
13int main() {14 Day day→ 4 = Day::Friday;15 std::array<std::string, 5> labels→ (empty){"Mon", "Tue", "Wed", "Thu", "Fri"};16 std::array<int, 5> tasks→ (empty){2, 3, 4, 3, 1};1718 int index→ 4 = static_cast<int>(day4);1920 std::cout << "day=" << labels(empty)[index4] << std::endl;21 std::cout << "tasks=" << tasks(empty)[index4] << std::endl;22 return 0;23}outputday=Fri tasks=1