Lección 11 · 11 de 20
Trabajar con vectores · C++
Modifique un std::vector en C++ con insert, erase y pop_back, y ordénelo y busque su mínimo y su máximo con las funciones de <algorithm>.

Además de push_back, `insert()` añade en cualquier sitio. Recibe la posición como iterador: list.begin() señala el primer elemento y list.begin() + 2, el tercero. Así coffee entra al principio y butter, delante de la posición 2.
`erase()` borra el elemento de una posición (aquí milk, el segundo) y `pop_back()` quita el último. Los demás se desplazan y size() se actualiza: de 6 elementos se pasa a 4.
`std::sort`, de <algorithm>, ordena un rango que va de begin() a end(), la posición justo después del último. Con cadenas, el orden es alfabético.
<algorithm> tiene muchas más funciones que trabajan con rangos: `std::min_element` y `std::max_element` devuelven un iterador al menor y al mayor, y el * de delante obtiene su valor. Con un tercer argumento, std::greater<int>() (de <functional>), sort ordena de mayor a menor, como una tabla de récords.
`clear()` vacía el vector y `empty()` dice si se ha quedado sin elementos.
Código · main.cpp
#include <algorithm>#include <functional>#include <iostream>#include <string>#include <vector>int main() { std::vector<std::string> list = {"milk", "bread", "eggs"}; list.push_back("apples"); // at the end list.insert(list.begin(), "coffee"); // at the start list.insert(list.begin() + 2, "butter"); // before position 2 for (auto item : list) std::cout << item << ' '; std::cout << "(" << list.size() << " items)\n"; // erase removes by position (here, the second item); pop_back, the last one. list.erase(list.begin() + 1); list.pop_back(); // sort from <algorithm> puts a range in order: begin() to end(). std::sort(list.begin(), list.end()); for (auto item : list) std::cout << item << ' '; std::cout << "(" << list.size() << " items)\n"; // Game scores: lowest, highest and a top list from high to low. std::vector<int> scores = {450, 120, 899, 75, 300}; std::cout << "Lowest: " << *std::min_element(scores.begin(), scores.end()) << ", highest: " << *std::max_element(scores.begin(), scores.end()) << '\n'; std::sort(scores.begin(), scores.end(), std::greater<int>()); for (int s : scores) std::cout << s << ' '; list.clear(); std::cout << "\nList empty? " << std::boolalpha << list.empty() << '\n'; return 0;}Salida · c++ -std=c++17 main.cpp -o main && ./main
coffee milk butter bread eggs apples (6 items) bread butter coffee eggs (4 items) Lowest: 75, highest: 899 899 450 300 120 75 List empty? true
Para recordar
v.begin()es la primera posición yv.end(), la siguiente a la última.insert(v.begin() + i, x)añade delante de la posicióni.erase(v.begin() + i)borra la posicióni;pop_back(), la última.std::sort(v.begin(), v.end())ordena de menor a mayor.std::min_elementystd::max_elementbuscan los extremos.
Ejercicio
Antes de borrar un producto, búsquelo con std::find(list.begin(), list.end(), "eggs"): si el resultado es list.end(), escriba que no está en la lista; si no, bórrelo con erase.