Cheat sheet

Tipos, passagem de argumentos, memória, cópia, objetos, STL, ficheiros e compilação.

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Tipos e divisão

QueroRegra
Fração de inteirosConverte antes: static_cast<double>(a) / b. a / b inteiro perde a fração
Sinal de -7 / 2-3, resto -1. Trunca para zero
Proteger soma / nn != 0 && soma / n > 10. Com n == 0, a segunda parte não corre
Intervalo 0 a 200 <= nota && nota <= 20. 0 <= nota <= 20 está errado

Indefinido: divisão inteira por zero, overflow com sinal. Expressões.

Funções e arrays

Preciso deUsa
Ler sem copiarconst T&
Alterar originalT&
Pode faltarT*, testa nulo
Referência r = bCopia valor para o referido. Não muda destino
  • Array N tem 0 a N-1. Em parâmetro vira apontador. Passa tamanho.
  • Descer com size_t: for (i = size(); i > 0;) { --i; lê v[i]; }. Com size() = 0, não entra.
  • Saída: devolve quantos escreveu. Chamador lê só esse prefixo.
  • Letras a a z: 26 presenças, destino 27 com \0. Conta letras, não terminador. Arrays. Filtro. Letras.

Memória

ExpressãoSignificado
p = &xGuarda o endereço de x em p
*p = 7Altera o objeto apontado por p
p + iAvança i elementos no mesmo array
const T* pO destino pode mudar; a leitura não altera
T* const pO destino não muda; a escrita altera o objeto
  • [begin, end) exclui o fim. O fim marca a paragem, não se lê.
  • Automático morre no bloco. new T pede delete. new T[n] pede delete[].
  • Depois de delete, os outros acessos a esse objeto ficam pendentes. Atribuir nullptr só limpa esse nome.
  • RAII: vector, string, unique_ptr primeiro. shared_ptr só com partilha real. Limites. Duração. RAII.

Objetos e cópia

  • Invariante primeiro. Valida antes de alterar. Classes.
  • T b = a constrói. b = a substitui existente.
  • Atribuição segura: prepara cópia completa, troca sem lançar, destrói antiga. Libertar primeiro perde estado. Cópia.
  • Três: destrutor, cópia, atribuição. Cinco: mais dois movimentos. Zero: prefere vector.
  • move apenas permite selecionar movimento. A operação escolhida é que transfere. Na biblioteca padrão, a origem continua válida sem estado prometido; tipos como unique_ptr prometem mais, e nos teus tipos vale o teu contrato. Em vector e string, podes destruir, atribuir ou consultar size(); o acesso a elementos continua a pedir índice válido.

Herança

  • Virtual por referência ou apontador usa tipo dinâmico.
  • override confere, incluindo const.
  • Cópia para base faz slicing.
  • = 0 é pura, classe abstrata.
  • Destruir por base pede destrutor virtual. Polimorfismo.

STL por decisão

QueroEscolhe
Índice e crescer no fimvector
Chave ordenadamap, set; procura, inserção e remoção em O(log n) comparações
Chave sem ordemunordered_map; média O(1) com boa distribuição das chaves e hash/igualdade de custo constante; pior caso linear
Remover com iterador conhecidolist constante; localizar o elemento pode custar O(n)
  • reserve(n) só aumenta a reserva se n exceder a capacidade atual; não cria elementos nem diminui. resize muda o tamanho.
  • No vector, realocar invalida todos os acessos aos elementos. erase no vector invalida os acessos da posição removida em diante. Usa o iterador devolvido.
  • Comparador estrito: comp(x, x) falso. <= não serve. Só isso não prova transitividade.
  • unique: junta adjacentes, devolve fim lógico, tamanho igual. Cauda válida sem valor prometido. Faz erase e não contes com ela. Ordena antes para todos os repetidos.
  • remove_if: compacta por predicado. Também pede erase.
  • Pesquisa: lower_bound exige intervalo particionado pelo mesmo comparador. Confirma != end() e a igualdade.
  • Consulta: find não insere. map[chave] insere um valor por omissão quando falta: int fica 0, string fica vazia. Contentor. Invalidação. Algoritmos.

Erros e ficheiros

  • Ciclo: while (fluxo >> valor). eof() conta passado, não prevê.
  • Linha: getline mais istringstream. Confirma extração, sem sobra, domínio 0 a 20.
  • Incompleto dá linha inválida. Vazio não dá registo. Ficheiros.
  • Exceção: apanha por referência constante. Os destrutores devem libertar recursos sem deixar sair exceções; se uma exceção escapa de um destrutor chamado durante o desenrolamento, o programa termina com std::terminate.
  • Básica conserva invariantes e evita fugas, sem prometer o valor. Forte não deixa efeitos observáveis.
  • assert desaparece com NDEBUG. Sanitizers só veem o executado. Testes.

Build

  • O cabeçalho declara a função. O .cpp define-a. A ligação junta os objetos. Em falta dá undefined reference.
  • Templates veem definição no cabeçalho. Módulos.
g++ -std=c++17 -Wall -Wextra -Wpedantic -g programa.cpp -o programa
cmake -S . -B build
cmake --build build

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.