2012-02-28 10 views
5

Para una tarea Se supone que debo recrear la biblioteca de vectores C++, y actualmente estoy atascado en cómo devolver el tamaño máximo.C++ Biblioteca de vectores, recreando para asignación, función de tamaño máximo

Según este sitio web: http://www.cplusplus.com/reference/stl/vector/ tamaño_type max_size() const; Tamaño máximo de devolución

Devuelve la cantidad máxima de elementos que puede contener el contenedor vectorial.


Actualmente mis funciones se basan en la manipulación de matrices y la biblioteca de vectores no se basa en una clase de plantilla, la biblioteca de vectores utiliza el int y size_t tipos de datos. (No estoy seguro de si esto tiene algo que ver con ella)

código relevante:

class vector{ 
private: 
int *vect; 
size_t length; 
size_t cap; 

public: 
//=====================Constructor================ 
vector(){ 
    length = 0; 
    cap = 20; 
    vect = new int[20]; 
} 

//INCOMPLETE 
size_t max_size() const{ 
    //return???!?!?!?!? 
} 

}

+0

¿Cuál es su pregunta? Tienes que hacer un seguimiento de la cantidad de elementos en tu matriz. Lo que supongo es 'longitud'. – birryree

+0

No, según el sitio web de referencia de C++, indica: Esta no es la cantidad de espacio de almacenamiento asignado actualmente al vector (esto se puede obtener con member vector :: capacity), sino el tamaño de potencial máximo que el vector podría alcanzar debido al sistema o limitaciones de implementación de la biblioteca. –

+0

Simplemente descifre la constante que devuelve el vector stl max_size() y lo pone en su función? 'size_t max_size() const {return some_huge_number_here; } ' –

Respuesta

1

De aquí en su enlace dado:

pero el tamaño máximo potencial de la el vector podría alcanzar debido a limitaciones de implementación del sistema o la biblioteca

En su caso, max_size es el tamaño máximo de una matriz de enteros en el sistema.

+0

Cómo mides esto y lo devuelves, no es el tamaño máximo que depende de la memoria física del sistema, así como el tipo de datos –

+0

Un límite es el valor máximo de std :: size_t. Las partes de la matriz siempre se pueden paginar. Además, eche un vistazo aquí: http://stackoverflow.com/questions/216259/is-there-a-max-array-length-limit-in-c – devil

4

Esto se refiere al tamaño máximo debido a las limitaciones dentro de su biblioteca/código o sistema. Para un ejemplo muy artificial, digamos que su implementación utilizó un número corto sin firmar (2 bytes) para almacenar el número de registros en su vector. Entonces su función max_size devolvería 65,536 ya que su biblioteca tendría esta limitación debido a implementación pobre.

Como otro ejemplo más realista, si usted sabía que el tamaño máximo de su vector en bytes estaba limitado a 4G, y el tamaño contenido en el contenedor era de 128 bytes por instancia, max_size devolvería algo a la melodía de 33,554,431. (0xFFFFFFFF/128)

A continuación se muestra cómo se hace esto en mi implementación de C++. Básicamente, encontrar el valor más grande de size_type (unsigned siendo -1) y luego dividirlo por el tamaño del objeto que se almacena dentro del vector. (value_type) En el hardware de 32 bits, size_type(-1) arrojará 4.294.967.295, y si estaba almacenando unsigned int, su valor sizeof(value_type) arrojaría 4 bytes, lo que le daría un valor de retorno max_size() de 1.073.741.823.

/** Returns the size() of the largest possible %vector. */ 
size_type max_size() const 
{ 
    return size_type(-1)/sizeof(value_type); 
} 
+0

¿Hay algún método para determinar el tamaño máximo para diferentes sistemas usando una plantilla de clase sin conocer las limitaciones de hardware del sistema, me imagino allí, pero como estudiante nuevo de C++, realmente no estoy seguro si/cómo esto sería posible –

+0

He editado mi respuesta en función de su comentario. –

Cuestiones relacionadas