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]; // 3Problemas 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-checkedstd::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 bothstd::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
- Noções básicas de std::vector: push_back, size, capacity
- Percorrer vetores: índice, range-for e iteradores
- Modificar vetores: insert, erase, clear
- Vector versus std::array versus matriz em C