LINUX.ORG.RU

Массив для хранения 2-х типов данных

 


0

2

Имеются два класса, первый хранит в себе пару значений, а второй четвёрку; второй наследуется от первого.

class A{
	T a;
	T b;
};
class B: A{
	T c;
	T d;
};
Хочу сделать класс массива, в котором в начале хранятся значения A, а в конце B:
{ A1, A2, A3, A4, ...Ai, ... , Bj... , B3, B2, B1 }
как такое лучше реализовать?

★★★★★
Ответ на: комментарий от thunar

а как тогда объём, занятый элементами, выходит ненулевым?

next_time ★★★★★
()

О, точно. А почему бы тебе не сделать два пула: для объектов класса A и для объектов класса B, а затем запилить собственный аллокатор и выделять место из них. Если упороться, ещё и сжатие можно сделать, что бы память не фрагментировалась.

Deleted
()
Ответ на: комментарий от annulen

Поражен, что до этого не посоветовали, два чая

blokant ★★
()

Массив указателей без использования специального аллоктара может привести к фрагментации кучи и промахам кеша.

ООП нинужно. Можно сделать структуру A, хранящую поля a, b и указатель p на структуру B, хранящую поля c и d. (p может быть и просто интом/short'ом — индексом в массиве, если хочется сэкономить память за счёт CPU)

Если p == NULL, имеем атом. Если нет — имеем ион, следовательно лезем по указателю в другой массив, который хранит нужное число структурок B. Оба массива будут лежать в памяти линейно. Оверхед по памяти такой же или меньше, чем случае с вектором указателей.

good_riddance
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.