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