C++ - Cap. 1: C++ Básico#
Este notebook contém o conteúdo com blocos executáveis que salvam, compilam e executam código C++ usando g++ via células %%bash. Funciona em um kernel Python padrão desde que g++ esteja instalado no ambiente.
Resumo#
Neste notebook demonstramos como criar variáveis em C++, tipos, operadores, I/O, comentários e como compilar/rodar programas.
1.1 Compilar e executar um programa C++ simples#
A célula abaixo cria hello.cpp, compila com g++ e executa o binário.
# cria, compila e executa C++ no Windows
with open("hello.cpp", "w") as f: f.write(r"""
#include <iostream>
int main() {
std::cout << "Hello Developer!" << std::endl;
return 0;
}
""")
!g++ hello.cpp -o hello_exe
!hello_exe.exe
Hello Developer!
%%bash
# Cria o arquivo hello.cpp usando redirecionamento de bloco.
# Tudo entre EOF e EOF será escrito no arquivo.
cat <<'EOF' > hello.cpp
#include <iostream> // Biblioteca para entrada e saída (cout, cin, endl)
int main() {
// Imprime a mensagem no terminal usando std::cout
std::cout << "Hello Developer!" << std::endl;
// Retorna 0 indicando que o programa executou com sucesso
return 0;
}
EOF
# Compila o arquivo hello.cpp e gera um executável chamado hello_exe
g++ hello.cpp -o hello_exe
# Executa o programa compilado
./hello_exe
Hello Developer!
Exemplo: função e tipos básicos#
Criamos um arquivo que usa variáveis int, float, double e string e imprime valores.
%%bash
# Cria o arquivo types_example.cpp usando here-document (EOF)
cat <<'EOF' > types_example.cpp
// Inclui a biblioteca padrão de entrada/saída
#include <iostream>
// Inclui a biblioteca de string
#include <string>
// Usa o namespace std para evitar escrever std:: o tempo todo
using namespace std;
// Função simples que soma dois inteiros
int add(int a, int b) {
return a + b;
}
int main() {
// Declara variáveis de diferentes tipos numéricos
int a = 3; // Inteiro simples
float b = 0.23f; // Número de ponto flutuante (precisão simples)
double c = 0.225678391734; // Número de ponto flutuante (alta precisão)
string s = "developer"; // String comum
// Exibe os valores das variáveis
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
cout << "c = " << c << "\n";
// Acessa o primeiro caractere da string
cout << "s[0] = " << s[0] << "\n";
// Chama a função add(2,5) e mostra o resultado
cout << "sum(2,5) = " << add(2,5) << endl;
// Retorno indicando sucesso
return 0;
}
EOF
# Compila o arquivo C++ gerado, usando o padrão C++11
g++ -std=c++11 types_example.cpp -o types_example
# Executa o programa compilado
./types_example
a = 3
b = 0.23
c = 0.225678
s[0] = d
sum(2,5) = 7
1.3 Listas e iteração (std::list)#
Exemplo de uso de std::list e laço for em C++11.
%%bash
# Cria o arquivo list_example.cpp usando um bloco here-document (EOF)
cat <<'EOF' > list_example.cpp
// Inclui biblioteca de entrada/saída (cout, endl)
#include <iostream>
// Inclui a biblioteca de listas da STL (std::list)
#include <list>
// Usa o namespace std para simplificar a escrita
using namespace std;
int main(){
// Cria uma lista de inteiros inicializada com alguns valores
list<int> numbers = {1, 10, 100, 1000};
// Insere um valor no início da lista
numbers.push_front(0);
// Insere um valor no final da lista
numbers.push_back(3000);
// Loop "for-each": percorre todos os elementos da lista
for (int val : numbers) {
// Imprime cada valor seguido de um espaço
cout << val << " ";
}
// Imprime uma quebra de linha ao final
cout << endl;
// Retorna 0 indicando execução bem-sucedida
return 0;
}
EOF
# Compila o código C++ usando o padrão C++11
g++ -std=c++11 list_example.cpp -o list_example
# Executa o binário gerado
./list_example
0 1 10 100 1000 3000
Dicionários (std::map)#
Exemplo com std::map<string,int> exibindo itens ordenados por chave.
%%bash
# 'cat << EOF > arquivo' cria um arquivo usando um bloco de texto.
# Tudo entre EOF e EOF é gravado dentro do arquivo map_example.cpp.
cat <<'EOF' > map_example.cpp
#include <iostream> // Permite usar cout, cin e outras funções de entrada/saída
#include <map> // Fornece o container associativo std::map
#include <string> // Necessário para trabalhar com std::string
using namespace std; // Evita escrever std:: antes de cout, map, string etc.
int main() {
// Declara um map que associa uma string (nome do personagem)
// a um int (quantidade de episódios)
map<string,int> episodes;
// Insere valores no map.
// A chave é o nome, o valor é a quantidade de episódios.
episodes["Dolores"] = 30; // Dolores aparece em 30 episódios
episodes["Maeve"] = 27; // Maeve aparece em 27 episódios
episodes["Theresa"] = 6; // Theresa aparece em 6 episódios
episodes["Clementine"] = 11; // Clementine aparece em 11 episódios
// Percorre todos os elementos do map utilizando um laço for-each
// 'auto item' representa um par (pair<string,int>)
// item.first → chave (nome)
// item.second → valor (episódios)
for (auto item : episodes) {
cout << item.first // imprime o nome do personagem
<< " appears in "
<< item.second // imprime o número de episódios
<< " episodes\n";
}
return 0; // Retorna 0 indicando execução bem-sucedida
}
EOF
# Compila o arquivo criado acima usando o padrão C++11
g++ -std=c++11 map_example.cpp -o map_example
# Executa o programa compilado
./map_example
Clementine appears in 11 episodes
Dolores appears in 30 episodes
Maeve appears in 27 episodes
Theresa appears in 6 episodes
I/O: leitura com cin#
Nota: cin em células pode bloquear se não houver stdin. Aqui mostramos um exemplo que lê da entrada padrão via printf e echo para demonstrar comportamento.
%%bash
cat <<'EOF' > input_example.cpp
#include <iostream>
#include <string>
using namespace std;
int main(){
string name;
// reads a single word from stdin
cin >> name;
cout << "Nice to meet you " << name << "!" << endl;
return 0;
}
EOF
g++ -std=c++11 input_example.cpp -o input_example
# Provide input via here-string to avoid interactive prompt
echo "Carlos" | ./input_example
Operadores aritméticos, atribuição e comparação#
Exemplo simples:
%%bash
# Cria o arquivo ops_example.cpp usando um bloco "here document" (EOF)
cat <<'EOF' > ops_example.cpp
// Biblioteca padrão de entrada e saída (cout, endl)
#include <iostream>
// Facilita o uso de cout, endl, etc.
using namespace std;
int main() {
// Declara duas variáveis para operações aritméticas
int a = 4, b = 3;
// Soma: 4 + 3 = 7
cout << (a + b) << endl;
// Subtração: 4 - 3 = 1
cout << (a - b) << endl;
// Multiplicação: 4 * 3 = 12
cout << (a * b) << endl;
// Divisão inteira: 4 / 3 = 1 (parte inteira apenas)
cout << (a / b) << endl;
// Módulo (resto da divisão): 4 % 3 = 1
cout << (a % b) << endl;
// Demonstração de operadores de atribuição abreviados
int x = 5;
// x += 2 → x = x + 2 → x passa a valer 7
cout << (x += 2) << endl;
// x *= 2 → x = x * 2 → x passa a valer 14
cout << (x *= 2) << endl;
// Comparações lógicas (true = 1, false = 0)
int y = 9, z = 8;
// y == z → 9 == 8 → falso → 0
cout << (y == z) << endl;
// y > z → 9 > 8 → verdadeiro → 1
cout << (y > z) << endl;
// y < z → 9 < 8 → falso → 0
cout << (y < z) << endl;
// Fim do programa
return 0;
}
EOF
# Compila usando C++11
g++ -std=c++11 ops_example.cpp -o ops_example
# Executa o binário
./ops_example
7
1
12
1
1
7
14
0
1
0
Comentários#
Para inserir use // para comentários de linha e /* ... */ para blocos. Exemplo:
%%bash
cat <<'EOF' > comments_example.cpp
#include <iostream>
using namespace std;
int main(){
// This is a single-line comment
cout << "Line comment example" << endl;
/* This is a block comment
spanning multiple lines */
cout << "Block comment example" << endl;
return 0;
}
EOF
g++ -std=c++11 comments_example.cpp -o comments_example
./comments_example
Line comment example
Block comment example