Quais são as diferenças entre uma matriz e um vetor em C ++? Um exemplo das diferenças podem ser bibliotecas, simbolismo, habilidades, etc.
Array
Os arrays contêm um número específico de elementos de um tipo específico. Para que o compilador possa reservar a quantidade necessária de espaço quando o programa for compilado, você deve especificar o tipo e o número de elementos que o array conterá quando for definido. O compilador deve ser capaz de determinar esse valor quando o programa é compilado. Uma vez que um array tenha sido definido, você usa o identificador para o array junto com um índice para acessar elementos específicos do array. [...] arrays são indexados por zero; ou seja, o primeiro elemento está no índice 0. Este esquema de indexação é indicativo do relacionamento próximo em C ++ entre ponteiros e matrizes e as regras que a linguagem define para aritmética de ponteiros.
- Referência de bolso C ++
Vetor
Um vetor é uma sequência de objetos de tamanho dinâmico que fornece
operator[]
acesso aleatório no estilo array . A função de membropush_back
copia seus argumentos por meio do construtor de cópia, adiciona essa cópia como o último item no vetor e aumenta seu tamanho em um.pop_back
faz exatamente o oposto, removendo o último elemento. A inserção ou exclusão de itens do final de um vetor leva um tempo constante amortizado e a inserção ou exclusão de qualquer outro local leva um tempo linear. Estes são os princípios básicos dos vetores. Há muito mais para eles. Na maioria dos casos, um vetor deve ser sua primeira escolha em vez de uma matriz de estilo C. Em primeiro lugar, eles são dimensionados dinamicamente, o que significa que podem crescer conforme necessário. Você não precisa fazer todos os tipos de pesquisa para descobrir um tamanho estático ideal, como no caso dos arrays C; um vetor cresce conforme necessário e pode ser redimensionado para maior ou menor manualmente, se necessário. Em segundo lugar, os vetores oferecem limites de verificação com aat
função membro (mas não comoperator[]
), para que você possa fazer algo se fizer referência a um índice inexistente, em vez de simplesmente observar o travamento do programa ou pior, continuar a execução com dados corrompidos.- Livro de receitas C ++
Respostas:
arrays:
malloc
);sizeof
(daí o idioma comumsizeof(arr)/sizeof(*arr)
, que, entretanto, falha silenciosamente quando usado inadvertidamente em um ponteiro);std::vector
:&vec[0]
é garantido que funcione conforme o esperado);begin()
/end()
, as STLs usuaistypedef
, ...)Considere também a "alternativa moderna" aos arrays -
std::array
; Já descrevi em outra resposta a diferença entrestd::vector
estd::array
, você pode querer dar uma olhada nisso.fonte
Acrescentarei que os arrays são construções de nível muito baixo em C ++ e você deve tentar ficar longe deles o máximo possível ao "aprender o básico" - até mesmo Bjarne Stroustrup recomenda isso (ele é o designer do C ++).
Os vetores têm quase o mesmo desempenho que as matrizes, mas com muitas conveniências e recursos de segurança. Você provavelmente começará a usar arrays ao fazer interface com APIs que lidam com arrays brutos ou ao construir suas próprias coleções.
fonte
Essas referências praticamente responderam à sua pergunta. Simplificando, os comprimentos dos vetores são dinâmicos, enquanto as matrizes têm um tamanho fixo. ao usar uma matriz, você especifica seu tamanho na declaração:
para vetores, você apenas declara e adiciona elementos
às vezes você não saberá o número de elementos necessários, então um vetor seria ideal para tal situação.
fonte