0Pricing
C++ Academy · Aula

Vector versus std::array versus matriz em C

Compare os três contentores sequenciais e escolha um com base no tamanho, na propriedade e no desempenho

Vector versus std::array versus matriz em C é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Três contêineres sequenciais

O C++ oferece três formas de armazenar uma sequência contígua:

  • std::vector — tamanho dinâmico, armazenamento na memória dinâmica
  • std::array — tamanho fixo em tempo de compilação, armazenamento na pilha
  • vetor no estilo C — tamanho fixo, baixo nível

Vetores no estilo C

A forma mais antiga. O tamanho faz parte do tipo. Converte-se em um ponteiro quando é passado para funções, perdendo o tamanho.

int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2];   // 3

Problemas dos vetores no estilo C

Eles esquecem o próprio tamanho na maioria dos contextos, não verificam os limites e são fáceis de usar incorretamente. Prefira std::array ou std::vector em código novo.

std::array (C++11)

Uma camada fina em torno de um vetor de tamanho fixo. Tem o mesmo desempenho de um vetor em C, mas com um tipo real e funções-membro apropriadas.

#include <array>
std::array<int, 5> a = {1, 2, 3, 4, 5};
std::cout << a.size();   // 5
std::cout << a.at(2);    // bounds-checked

std::array permanece na pilha

Ao contrário de std::vector, std::array armazena seus elementos diretamente. Não há alocação na memória dinâmica. O tamanho é um parâmetro de modelo.

std::vector para tamanho dinâmico

Use std::vector quando não souber o tamanho em tempo de compilação ou quando o tamanho mudar durante a execução.

Comparação de desempenho

Para tamanhos fixos, os três têm desempenho semelhante. std::vector acrescenta uma pequena sobrecarga para controlar o ponteiro e o tamanho, além de uma indireção.

Passagem para funções

Passe vector ou std::array por referência constante para evitar cópias. Os vetores em C devem ser substituídos por std::span (C++20) quando forem apenas emprestados.

void process(const std::vector<int>& v);
void process(const std::array<int, 5>& a);

#include <span>
void process(std::span<const int> data);  // accepts both

std::span (C++20)

Uma visualização sem propriedade sobre uma sequência contígua. É como um par formado por ponteiro e comprimento. Aceita vetores, std::arrays e vetores em C de maneira uniforme.

Quando escolher cada opção

Árvore de decisão:

  • É necessário um tamanho dinâmico → std::vector
  • Tamanho fixo, sem alocação → std::array
  • Empréstimo sem propriedade → std::span
  • Interoperabilidade com código C → vetor em C

Conversão entre eles

Você pode copiar elementos entre os tipos usando intervalos ou algoritmos.

std::array<int, 3> a = {1, 2, 3};
std::vector<int> v(a.begin(), a.end());
int c[3];
std::copy(a.begin(), a.end(), c);

Verificação rápida

Qual contêiner armazena os elementos na pilha e tem um tamanho conhecido em tempo de compilação?

Recapitulação

Prefira std::vector para tamanhos dinâmicos e std::array para tamanhos fixos. Vetores no estilo C raramente são a melhor escolha no código moderno. Use std::span para emprestar uma sequência sem assumir sua propriedade.

Perguntas Frequentes

A aula “Vector versus std::array versus matriz em C” é grátis?

Sim — o texto completo de “Vector versus std::array versus matriz em C” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Vector versus std::array versus matriz em C”?

Compare os três contentores sequenciais e escolha um com base no tamanho, na propriedade e no desempenho Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Vector versus std::array versus matriz em C”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Noções básicas de std::vector: push_back, size, capacity
  2. Percorrer vetores: índice, range-for e iteradores
  3. Modificar vetores: insert, erase, clear
  4. Vector versus std::array versus matriz em C
← Voltar para C++ Academy