Classe Vector
Vetores são recipientes em sequência, representando matrizes que podem mudar de tamanho.
Assim como as matrizes, os vetores utilizam locais de armazenamento contíguos para os seus elementos, o que significa que os elementos podem ser acessados utilizando-se deslocamentos em ponteiros regulares para seus elementos, e tão eficientemente como em matrizes. Mas ao contrário de matrizes, o seu tamanho pode mudar de forma dinâmica, com a implementação do armazenamento sendo feita automaticamente pelo contêiner.
Internamente, os vetores utilizam uma matriz alocada dinamicamente para armazenar seus elementos. Esta matriz pode precisar ser realocada, a fim de crescer em tamanho, quando novos elementos são inseridos, o que implica a atribuição de uma nova matriz e a movimentação de todos os seus elementos. Esta é uma tarefa relativamente ‘cara’ em termos de tempo de processamento, e assim, os vectores não são realocados cada vez que um elemento é adicionado ao vetor.
Em vez disso, os recipientes de vector podem atribuir algum armazenamento adicional para acomodar o possível crescimento, e, assim, o recipiente pode ter uma real capacidade de armazenamento maior que a estritamente necessária para conter os elementos (ou seja, o seu tamanho). As bibliotecas podem implementar diferentes estratégias de crescimento par obter um equilíbrio entre a utilização da memória e as realocações; mas em todo caso, as realocações
devem
acontecer
apenas
em
intervalos
crescentes
logaritmicamente de tamanho, de modo a que a inserção de elementos individuais no
final
do
vector
pode
ser
fornecida
com
uma
complexidade amortizado pelo tempo constante (ver push_back).
Portanto, em comparação com as matrizes, os vetores consumem mais memória em troca da capacidade de gerenciar o armazenamento e crescer dinamicamente de forma eficiente.
Em comparação com os outros recipientes de sequências dinâmicas