Biblioteca de consulta / C++17

Las herramientas, a mano.

Consultá una operación, entendé cuándo usarla o llevate un bloque a tu apunte. Elegí cuánto detalle necesitás.

Plantilla

1 bloque

C++17 · Al principio de cada apunte

Plantilla de C++

Este bloque se incluye una sola vez al principio del apunte generado. Reúne la estructura común para escribir un programa de competencia en GNU C++17. El índice del apunte se calcula a partir de los módulos y partes seleccionados.

Apoyo básico

6 bloques

C++17

Entrada y salida

cin lee los datos de la entrada estándar y cout escribe en la salida estándar. El enunciado define el orden y el tipo de cada dato. Los espacios y saltos de línea separan los datos que leés con >>.

C++17

Condiciones y decisiones

Una condición es una expresión que se interpreta como verdadera o falsa. Permite elegir qué instrucciones ejecutar según los datos. Podés guardarla en una variable bool cuando darle un nombre aclara qué estás preguntando.

C++17

Recorridos y ciclos

Un ciclo repite instrucciones. Usá for cuando llevás una posición o cantidad de pasos, un recorrido por elementos cuando alcanza con el valor, y while cuando la repetición depende de una condición que va cambiando.

C++17

Funciones, referencias y lambdas

Una función reúne instrucciones para una tarea y puede devolver un resultado. Sus parámetros son los datos que recibe. Usala para nombrar una operación repetida, separar una condición o conservar una implementación que después vas a adaptar.

C++17

Iteradores y rangos

Un iterador señala una posición de una colección. Muchas operaciones de la STL reciben dos iteradores para elegir qué parte van a recorrer o devuelven un iterador al elemento encontrado. Un índice, en cambio, es un número de posición.

Texto

2 bloques

Contenedores

9 bloques

C++17

Vectores

Un vector<T> guarda una secuencia de elementos del mismo tipo. vector<int> guarda enteros y vector<long long> guarda enteros amplios. Conserva el orden y permite valores repetidos.

C++17

Pares

Un pair<T, U> guarda dos datos juntos. Sus tipos pueden ser iguales o diferentes. Usalo para coordenadas, valor y posición original, o cualquier dato que deba seguir asociado a otro mientras lo guardás o lo ordenás.

C++17

Matrices y grillas

Una matriz organiza datos por fila y columna. vector<vector<int>> permite crear tantas filas y columnas como indique la entrada. Para un tablero de caracteres también sirve vector<string>, donde cada string es una fila.

C++17

Set

Un set<T> guarda valores distintos del mismo tipo. Si insertás un valor que ya está, no lo agrega. Los elementos se mantienen ordenados de menor a mayor con el orden por defecto.

C++17

Map

Un map<Clave, Valor> asocia un valor a cada clave distinta. Por ejemplo, map<string, int> puede guardar la cantidad de apariciones de cada palabra y map<string, string> puede guardar una traducción por palabra.

C++17

Multiset

Un multiset<T> guarda elementos ordenados y permite varias copias iguales. Usalo cuando el conjunto cambia y necesitás conservar cada aparición, consultar extremos o quitar una aparición concreta de un valor.

C++17

Pila

Una pila, stack<T>, permite agregar y quitar elementos por el mismo extremo. El último en entrar es el primero que se retira. Ese orden suele llamarse LIFO.

C++17

Cola

Una cola, queue<T>, agrega elementos por el final y los retira por el principio. El primero en entrar es el primero en salir. Ese orden suele llamarse FIFO.

C++17

Deque

Una deque<T> es una secuencia a la que podés agregar o quitar elementos por ambos extremos. También permite consultar por índice, conservar repetidos y recorrer los datos en orden.

Algoritmos de la STL

4 bloques

C++17

Buscar en datos ordenados

Si una secuencia ya está ordenada, lower_bound, upper_bound y binary_search permiten consultar valores mediante búsqueda binaria. En un vector cada consulta cuesta O(log n), después del costo inicial de ordenar cuando haga falta.

Cuentas

3 bloques

C++17

Cuentas enteras y restos

Las operaciones entre enteros producen resultados enteros. En una división, la parte fraccionaria se descarta hacia cero. % calcula el resto. Estas operaciones sirven para repartir en grupos completos, consultar divisibilidad y separar una cantidad en unidades más grandes.

C++17

Reales, redondeo y precisión

double permite representar valores con parte decimal de forma aproximada. Usalo cuando el enunciado admite un margen de error o el cálculo requiere longitudes, ángulos o cocientes decimales. long double puede aportar más precisión según la plataforma.

Recetas básicas

5 bloques

C++17

Tablas de frecuencias

Una tabla de frecuencias guarda cuántas veces aparece cada valor. Se construye recorriendo los datos una vez y aumentando el contador correspondiente. Después permite consultar varias cantidades sin volver a recorrer la entrada completa.

C++17

Sumas prefijas

Una suma prefija guarda los totales acumulados de un vector. Con la convención de esta ficha, prefijo[i] suma los primeros i elementos: prefijo[0] vale cero y prefijo[n] suma todo el vector. Por eso la tabla tiene una posición más que los datos.

C++17

Apariciones de un patrón en texto

string::find busca una aparición de un carácter o de una cadena más corta dentro de otra. Para recorrer todas las apariciones de un patrón, se repite la búsqueda indicando desde qué posición continuar. Un resultado válido es un índice; string::npos significa que no encontró otra aparición.

C++17

Unión de intervalos

Un intervalo se puede guardar como un par con extremo izquierdo y derecho. Cuando varios tramos cubren una recta, sumar sus longitudes por separado cuenta varias veces las partes superpuestas. La unión combina los tramos que se tocan o superponen para contar cada parte una sola vez.