История изменений
Исправление Kroz, (текущая версия) :
На каком этапе тормоза вылезут?
На этапе преобразования индексов.
На самом деле я поддерживаю идею двух массивов.
но если хочешь извращений, то как-то так (пишу навскидку, код не проверял, идею, думаю, поймешь)
class A{
T a;
T b;
};
class B: A{
T c;
T d;
A GetA1(){ return A(a,b); }
A GetA2(){ return A(c,d); }
B();
B(A A1, A A2):A(A1),c(A2.a),d(A2.b){};
};
class Container{
std::vector<A> arr[size]; // Сам определи как ты размер задашь
A GetA(int i){ return arr[i];}
B GetB(int i){ return B(arr[arr.size()-2-i*2],arr[arr.size()-1-i*2]); }
}
Говнокод. Сам проставишь константы, сделаешь чтобы лишний раз a, b, c, d не копировались, а возвращались ссылками. Но идею, думаю, ты понял.
Еще:
- изменение размера массива создаст еще накладные расходы
- надеюсь, ты проконтроллируешь, чтобы одна половина массива не налезла на другую.
- коль ты пишешь на C++, настоятельно рекомендую использовать vector вместо C-шных массивов.
Исправление Kroz, :
На каком этапе тормоза вылезут?
На этапе преобразования индексов.
На самом деле я поддерживаю идею двух массивов.
но если хочешь извращений, то как-то так (пишу навскидку, код не проверял, идею, думаю, поймешь)
class A{
T a;
T b;
};
class B: A{
T c;
T d;
A GetA1(){ return A(a,b); }
A GetA2(){ return A(c,d); }
B();
B(A A1, A A2):A(A1),c(A2.a),d(A2.b){};
};
class Container{
std::vector<A> arr[size]; // Сам определи как ты размер задашь
A GetA(int i){ return arr[i];}
B GetB(int i){ return B(arr[arr.size()-2-i*2],arr[arr.size()-1-i*2]); }
}
Говнокод. Сам проставишь константы, сделаешь чтобы лишний раз a, b, c, d не копировались, а возвращались ссылками. Но идею, думаю, ты понял.
Еще:
- изменение размера массива создаст еще накладные расходы
- надеюсь, ты проконтроллируешь, чтобы одна половина массива не налезла на другую.
Исходная версия Kroz, :
На каком этапе тормоза вылезут?
На этапе преобразования индексов.
На самом деле я поддерживаю идею двух массивов.
но если хочешь извращений, то как-то так (пишу навскидку, код не проверял, идую, думаю, поймешь)
class A{
T a;
T b;
};
class B: A{
T c;
T d;
A GetA1(){ return A(a,b); }
A GetA2(){ return A(c,d); }
B();
B(A A1, A A2):A(A1),c(A2.a),d(A2.b){};
};
class Container{
std::vector<A> arr[size]; // Сам определи как ты размер задашь
A GetA(int i){ return arr[i];}
B GetB(int i){ return B(arr[arr.size()-2-i*2],arr[arr.size()-1-i*2]); }
}
Говнокод. Сам проставишь константы, сделаешь чтобы лишний раз a, b, c, d не копировались, а возвращались ссылками. Но идею, думаю, ты понял.
Еще:
- изменение размера массива создаст еще накладные расходы
- надеюсь, ты проконтроллируешь, чтобы одна половина массива не налезла на другую.