Saltar al contenido principal

Conceptos básicos de C++

¿Qué es C++?

C++ es un lenguaje de programación de propósito general que se desarrolló como una extensión de C. Fue diseñado para ser eficiente y flexible, y se utiliza en una amplia gama de aplicaciones, desde software de sistema hasta aplicaciones de negocio.

¿Por qué usar C++ en programación competitiva?

Una de las principales razones para usar C++ en programación competitiva es su eficiencia y velocidad. Ademas por su liberia estandar (STL) que nos permite usar estructuras de datos y algoritmos pre-implementados, lo cual nos permite enfocarnos en la resolución del problema y no en la implementación de las estructuras de datos y algoritmos.

Estructura de un basica de un programa en C++

#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

Input y Output

Para leer datos del usuario se usa std::cin y para escribir datos se usa std::cout.

#include <iostream>

int main() {
int a, b;
std::cin >> a >> b;
std::cout << a + b << std::endl;
return 0;
}

Varios inputs

Cuando se leen varios datos se puede usar el operador >> para leer varios datos de una vez. Ya que cpp lee los datos de izquierda a derecha y de arriba a abajo.

#include <iostream>

int main() {
int a, b, c;
std::cin >> a >> b >> c;
std::cout << a + b + c << std::endl;
}

Incrementando la velocidad del I/O

Por defecto, los flujos de C++ (cin, cout, cerr, clog) están sincronizados con la biblioteca estándar de entrada/salida de C (stdio.h - como printf, scanf). Esta sincronización asegura que la salida de los flujos de C++ y C se intercalen en un orden predecible, lo cual es bueno para la programación general pero lento para tareas de programación competitiva que manejan grandes volúmenes de datos.

Para incrementar la velocidad del I/O se puede desincronizar los flujos de C++ con la biblioteca estándar de entrada/salida de C con el siguiente código:

#include <iostream>

int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
return 0;
}

Esto desincroniza los flujos de C++ con la biblioteca estándar de entrada/salida de C, lo cual incrementa la velocidad de la entrada y salida de datos.

Casos de prueba

Algo muy común en la programación competitiva es que hay problemas donde hay que leer t casos de prueba, para ello podemos definir una variable int t; y leer el valor de t con std::cin >> t;, y luego usar un while para leer los casos de prueba.

#include <iostream>

int main() {
int t;
std::cin >> t;
while (t--) {
int a, b;
std::cin >> a >> b;
std::cout << a + b << std::endl;
}
return 0;
}