witam
muszę wykonać pewien projekt w którym chcę użyć tablic. Dużym ułatwieniem było by aby numery tablic zaczynały się od 1 a nie od 0. Da się to jakoś łatwo zrobic?
Zdefiniuj tablicę o 1 element wiekszą niż potrzebujesz i używaj indeksów od 1 ignorując 0.
np tutaj masz.
int tablica[10] //wedlug tego co chcesz to ta tablica bedzie 9-cio elementowa. Pamietaj o tym
for (int i = 1 ; i < 10 ; i++)
{
tablica[i] = i*i;
}
ogolnie troche bez sensu ale ok. To jak wolisz tak to proponuje pisac w LUA. Tam tablice zaczynaja sie od 1
int index ( int i )
{
return i-1;
}
int main ()
{
int tab[10];
tab[index(1)] = 1; //itd...
}
#include <iostream>
#include <cmath>
#include <cassert>
using namespace std;
template<typename T, int Low, int High>
struct array{
static constexpr size_t elements_count = abs(Low-High);
T data[elements_count];
template<typename... Tn>
array(Tn... tns): data{tns...}{}
size_t size() const{
return elements_count;
}
auto begin(){
return ::begin(data);
}
auto begin() const{
return ::begin(data);
}
auto end(){
return ::end(data);
}
auto end() const{
return ::end(data);
}
auto low() const{
return Low;
}
auto high() const{
return High;
}
T &operator[](int idx){
assert(idx >= low() && idx < high());
return data[idx-low()];
}
const T&operator[](int idx) const{
assert(idx >= low() && idx < high());
return data[idx-low()];
}
};
int main() {
array<int, 2, 5> table = {1, 2, 3};
for(int i = table.low(); i < table.high(); ++i){
cout << "table[" << i << "]: " << table[i] << endl;
}
return 0;
}
Dlaczego jeszcze nikt nie napisał, że tablice od 1 wcale nie są ułatwieniem? Jasne, istnieją sytuacje, w których chcielibyśmy tablice [-10...10] bo odpowiada to logicznym aspektom algorytmu, ale w ogromnej większości numerowanie od 0 jest okej. Lepsze niż od 1. Trzeba się przyzwyczaić, tyle.
powiem tyle... po co ci to? praktycznego zastosowania nie ma, a wygoda jest praktycznie żadna... jak masz z tym jakiś duży problem to napisz sobie klasę z przeciążonym operatorem [] i po problemie