Witam, jako że często w tematach dla Newbie zauważyłem potrzebę użycia tablicy o stałym rozmiarze jednak nie numerowanej od zera postanowiłem taką napisać i przy okazji poduczyć się nowego standardu C++11. Chciałem, żebyście powiedzieli co by tu można dodać zmienić itd. żeby użycie jej było wygodne i szybkie (nie jestem pewien czy lambdy nie spowalniają kodu)
#include <functional>
#include <assert.h>
using namespace std;
template<typename T, int N, int FROM = 0>
class array
{
public:
typedef function<void(int,T&)>(ElementFunction);
array()
{
_tab = _tab_ - FROM;
}
array(const T& value)
{
_tab = _tab_ - FROM;
each([&value](const int index,T& el){el = value;});
}
T& operator[] (const int index)
{
assert(index>=FROM && index<FROM+N);
return _tab[index];
}
array<T,N,FROM>& operator= (const array<T,N,FROM>& x)
{
each([&](const int i,T& el){el = x[i];});
}
void each(ElementFunction func)
{
for (int i=FROM,TO = FROM+N; i<TO; ++i)
func(i,_tab[i]);
}
private:
T _tab_[N];
T* _tab;
};
przykład użycia (wymienia ile liczb z zakresu od <-5..5> podał użytkownik):
int main()
{
array<int, 11, -5> a;
int d;
while (cin >> d)
{
a[d]++;
a.each([&](const int i, int& el){cout << i << ": " << el << endl;});
cout << endl;
}
return 0;
}