Ну, здесь есть два размера. Само vector
обычно является не более чем указателем или двумя на выделенную память и целыми числами без знака, отслеживающими размер и емкость. Также есть выделенная память, и я думаю, что вы этого хотите.
То, что вы хотите сделать, - это создать собственный распределитель, который будет использовать vector
. Когда придет время, он будет использовать ваш распределитель, и вы сможете использовать свои собственные специальные функции. Я не буду останавливаться на полных деталях распределителя, но на деталях:
template <typename T>
struct aligned_allocator
{
// ...
pointer allocate(size_type pCount, const_pointer = 0)
{
pointer mem = 0;
if (posix_memalign(&mem, YourAlignment, sizeof(T) * pCount) != 0)
{
throw std::bad_alloc(); // or something
}
return mem;
}
void deallocate(pointer pPtr, size_type)
{
free(pPtr);
}
// ...
};
И тогда вы будете использовать это как:
typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;
aligned_T_vector vec;
vec.push_back( /* ... */ ); // array is aligned
Но, повторяя первую точку, размер vector
одинаков независимо от того, сколько элементов он содержит, поскольку он указывает только на буфер. Изменяется только размер этого буфера.