- Executores
-
Aprender
Aprender Python Exemplos executáveis, NumPy, pandas e mais Aprender IARedes neurais, ML e LLMs do zero Aprender C e C++ Ponteiros, memória, STL e C++ moderno Aprender C#Fundamentos, POO, LINQ, async e exercícios .NET Algoritmos em Python Busca, ordenação, recursão e visualizações O(n) Algoritmos em C e C++ Compare implementações em C e C++
- DesafiosNovo
Em C++, RAII associa um recurso à vida útil de um objeto: o recurso é liberado automaticamente quando o objeto sai de escopo. Objetos no mesmo escopo são destruídos em ordem reversa de criação.
Processe os eventos na ordem:
{: entra em um novo escopo interno.}: sai do escopo atual; todo recurso adquirido nele é liberado, do mais recente para o mais antigo.acquire <name>: cria um recurso no escopo atual.
Quando os eventos acabam, os escopos abertos restantes terminam do mais interno para o mais externo (incluindo o escopo externo do programa), liberando seus recursos da mesma forma.
Implemente raii_release_order(events).
Input
events: Os eventos. As chaves estão balanceadas ou ficam abertas, nunca são fechadas sem terem sido abertas.
Output
Retorne os nomes dos recursos na ordem em que são liberados.
Restrições
0 ≤ número de eventos ≤ 100,000
Nomes têm de 1 a 20 caracteres sem espaços
Exemplos
Exemplo 1
Entrada:
events = ["acquire db", "{", "acquire file", "acquire lock", "}", "acquire log"]
Saída esperada:
["lock", "file", "log", "db"]
Explicação
Sair do escopo interno libera lock depois file (do mais recente para o mais antigo). No final, o escopo externo libera log depois db: ["lock", "file", "log", "db"].
Exemplo 2
Entrada:
events = ["{", "acquire a", "{", "acquire b"]
Saída esperada:
["b", "a"]
Explicação
Dois escopos ainda estão abertos no final: o mais interno libera b, depois o próximo libera a: ["b", "a"].
Referências
-
Exemplo 1 Não executadoEntrada:
events = ["acquire db", "{", "acquire file", "acquire lock", "}", "acquire log"]Saída esperada:["lock", "file", "log", "db"]Sua saída -
Exemplo 2 Não executadoEntrada:
events = ["{", "acquire a", "{", "acquire b"]Saída esperada:["b", "a"]Sua saída
4 testes ocultos também serão executados ao enviar.
Compilador e depurador C++ online
Compile e depure C++ com pontos de interrupção, variáveis e controles GDB no modo Servidor.
🚀 2,393,684 execuções totais (1,310 este mês)
Pratique C++ com desafios de código
Resolva problemas práticos direto neste editor: rode os testes de exemplo, envie sua solução e receba uma revisão de código por IA.
Aprenda e pratique C/C++
Siga uma trilha com lições executáveis e depois teste seus conhecimentos com desafios de programação.
💻 Sobre este Executor C++ Online
O CodeUtility C++ Executor permite escrever e executar código C++ diretamente no seu navegador - sem instalação ou configuração de compilador. É alimentado por um sandbox seguro que suporta padrões reais de C++ desde o C++11, C++14, C++17, até a versão mais recente.
Esta ferramenta usa um compilador C++ real a correr na nuvem para compilar e executar o seu código, garantindo um comportamento preciso e consistente entre versões. Pode experimentar livremente conceitos centrais de C++, como variáveis, funções, loops, condicionais e programação orientada a objetos.
Quer esteja a preparar-se para entrevistas, a aprender recursos modernos de C++ ou a validar a lógica de algoritmos, o CodeUtility C++ Executor oferece um ambiente simples e poderoso para executar código instantaneamente em qualquer dispositivo.
Mais do que um executor de código
Use no mesmo executor um editor de vários arquivos, um terminal de execução isolado, bibliotecas específicas do ambiente, espaços de trabalho persistentes, compartilhamento e colaboração em tempo real.
Como usar este executor?
Escolha um ambiente de execução, abra ou crie um arquivo, escreva o código e selecione Executar. A saída aparece no terminal; usuários conectados podem manter arquivos em um espaço de trabalho, instalar bibliotecas e colaborar por meio de compartilhamentos.
- Selecione uma versão e edite o arquivo atual ou abra outro arquivo do espaço de trabalho.
- Execute o código, forneça dados no terminal quando solicitado e consulte o histórico de execuções salvo.
- Use bibliotecas, ferramentas do espaço de trabalho, compartilhamento e chat quando a tarefa exigir mais de um trecho de código.
💡 Noções básicas de C++ e exemplos que pode experimentar acima
1. Declaração de variáveis e constantes
O C++ exige que declare o tipo de cada variável. Use const para definir valores somente leitura que não podem ser alterados após a inicialização.
int age = 30;
double pi = 3.14159;
char grade = 'A';
std::string name = "Alice";
bool isActive = true;
// Constantes
const int MAX_USERS = 100;
const std::string COMPANY = "CodeUtility";
// Tentar modificar um const causará um erro em tempo de compilação
// MAX_USERS = 200; // ❌ erro
2. Condicionais (if / switch)
Use if, else if, else para ramificações. Use switch para vários valores.
int x = 2;
if (x == 1) {
std::cout << "Um\n";
} else if (x == 2) {
std::cout << "Dois\n";
} else {
std::cout << "Outro\n";
}
// Switch-case
switch (x) {
case 1:
std::cout << "Um\n";
break;
case 2:
std::cout << "Dois\n";
break;
default:
std::cout << "Outro\n";
}
3. Loops
Use for, while e do-while para repetir blocos de código.
for (int i = 0; i < 3; i++) {
std::cout << i << "\n";
}
int n = 3;
while (n > 0) {
std::cout << n << "\n";
n--;
}
4. Arrays
Arrays armazenam múltiplos elementos do mesmo tipo.
int numbers[3] = {10, 20, 30};
std::cout << numbers[1] << "\n";
5. Manipulação de Arrays/Vetores
Use std::vector para arrays dinâmicos.
#include <vector>
std::vector nums = {1, 2, 3};
nums.push_back(4);
nums.pop_back();
for (int n : nums) {
std::cout << n << " ";
}
6. Entrada/Saída na consola
Use std::cin para entrada e std::cout para saída.
std::string name;
std::cout << "Introduza o seu nome: ";
std::cin >> name;
std::cout << "Olá, " << name << "\n";
7. Funções
Funções agrupam lógica reutilizável. Use parâmetros e tipos de retorno.
int add(int a, int b) {
return a + b;
}
std::cout << add(3, 4);
8. Mapas
std::map armazena pares chave-valor como dicionários.
#include <map>
std::map ages;
ages["Alice"] = 30;
std::cout << ages["Alice"];
9. Tratamento de exceções
Use try e catch para lidar com erros em tempo de execução.
try {
throw std::runtime_error("Ocorreu um erro");
} catch (const std::exception& e) {
std::cout << e.what();
}
10. Entrada/Saída de ficheiros
Use fstream para ler e escrever em ficheiros.
#include <fstream>
std::ofstream out("file.txt");
out << "Olá, ficheiro";
out.close();
std::ifstream in("file.txt");
std::string line;
getline(in, line);
std::cout << line;
in.close();
11. Manipulação de strings
Strings em C++ suportam métodos como length(), substr() e find().
std::string text = "Olá Mundo";
std::cout << text.length();
std::cout << text.substr(0, 5);
std::cout << text.find("Mundo");
12. Classes e objetos
C++ suporta programação orientada a objetos usando classes.
class Person {
public:
std::string name;
Person(std::string n) : name(n) {}
void greet() { std::cout << "Olá, eu sou " << name; }
};
Person p("Alice");
p.greet();
13. Ponteiros
Um ponteiro armazena o endereço de memória de outra variável. Use & para obter um endereço,
e * para desreferenciar (aceder ao valor nesse endereço).
int x = 10;
int* ptr = &x;
std::cout << "Valor de x: " << x << "\n";
std::cout << "Endereço de x: " << ptr << "\n";
std::cout << "Valor a partir do ponteiro: " << *ptr << "\n";
// Modificar x através do ponteiro
*ptr = 20;
std::cout << "x atualizado: " << x << "\n";
🐞 Como depurar código %{language} online
Use o depurador %{language} online para encontrar erros de execução e lógica sem instalar compilador ou IDE. O modo Servidor compila com símbolos de depuração e executa o programa no GDB.
- Defina pontos de interrupção ao lado dos números de linha.
- Selecione Depurar para compilar e pausar no primeiro ponto correspondente.
- Inspecione a linha, a pilha de chamadas e as variáveis.
- Use Continuar, Passar por cima, Entrar ou Sair.
- Selecione Parar para encerrar a sessão.
Comece com um exemplo reproduzível e coloque o ponto de interrupção antes do comportamento inesperado.