Range based for loops do not need to explicitly use begin() and end() functions or use a counter to keep track of index, providing more readability.
vector<int> nos {1, 2, 3, 4};
for(const auto& no : nos)
cout << no << " ";
map<string, int> nameToIdMap { {"ABC", 2}, {"XYZ" , 1}};
for(const auto& kv : nameToIdMap)
cout << kv.first.c_str() << ":" << kv.second << " ";
Range Based For Loop for custom types
template <typename T, size_t S>
class CustomContainer
{
T m_data[S] = {};
public:
const T* GetData() const { return m_data;}
size_t GetSize() const { return S;}
void SetValueAt(size_t index, T value)
{
if(index < S)
*(m_data + index) = value;
else
throw std::out_of_range("Out of range");
}
};
template <typename T, size_t S>
const T* begin(const CustomContainer<T, S>& container)
{
return container.GetData();
}
template <typename T, size_t S>
const T* end(const CustomContainer<T, S>& container)
{
return container.GetData() + S;
}
int main()
{
CustomContainer<int, 4> container;
container.SetValueAt(0, 4);
container.SetValueAt(1, 6);
container.SetValueAt(2, 5);
container.SetValueAt(3, 8);
for(const auto& iter : container)
cout << iter << " ";
return 0;
}