Skip to content

Instantly share code, notes, and snippets.

@hjroh0315
Created March 6, 2022 04:17
Show Gist options
  • Select an option

  • Save hjroh0315/8b512edb4e1930eaa57a7191aaf93814 to your computer and use it in GitHub Desktop.

Select an option

Save hjroh0315/8b512edb4e1930eaa57a7191aaf93814 to your computer and use it in GitHub Desktop.
C++ enumerate (끔찍한 흑마술입니다)
#include<iostream>
#include<set>
#include<utility>
#include<cstdlib>
#include<ctime>
using namespace std;
template<class T>
struct enum_iter
{
T it;size_t idx;
enum_iter& operator++()
{
idx++;it++;
}
enum_iter operator++(int)
{
enum_iter tmp{it,idx};idx++;it++;return tmp;
}
bool operator!=(enum_iter i)
{
return it!=i.it;
}
pair<size_t,decltype(*it)> operator*()
{
return {idx,*it};
}
};
template<class T>
struct enumerate
{
T& cont;
using iter=T::iterator;
enumerate(T& t):cont(t){}
enum_iter<iter> begin(){return enum_iter{cont.begin(),0};}
enum_iter<iter> end(){return enum_iter{cont.end(),cont.size()};}
};
int main()
{
srand(time(0));
set<int> S;
for(int i=0;i<10;i++)
S.insert(rand());
for(auto[i,k]:enumerate(S))cout<<i<<" "<<k<<endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment