Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa | |||
curso-cpp:contenedor-vector [2017/10/12 18:18] santo [Ejercicios] |
curso-cpp:contenedor-vector [2017/10/29 19:25] (actual) santo |
||
---|---|---|---|
Línea 22: | Línea 22: | ||
Por ejemplo, es válido en un programa ((En [[cpp-avanzado:c++11|C++11]])) declarar vectores de la forma mostrada: | Por ejemplo, es válido en un programa ((En [[cpp-avanzado:c++11|C++11]])) declarar vectores de la forma mostrada: | ||
- | <code> | + | <code cpp> |
vector<string> v1 = {"goma", "espuma", "goma", "eva"}; | vector<string> v1 = {"goma", "espuma", "goma", "eva"}; | ||
vector<string> v2 = {"a", "b", "c"}; | vector<string> v2 = {"a", "b", "c"}; | ||
Línea 46: | Línea 46: | ||
En estos tres ejemplos, así como en los cinco ejercicios que siguen, siempre que el programa reciba secuencias, supondremos que primero se lee un entero ''N'', con la cantidad de elementos, y luego se leen los elementos de la secuencia en sí. | En estos tres ejemplos, así como en los cinco ejercicios que siguen, siempre que el programa reciba secuencias, supondremos que primero se lee un entero ''N'', con la cantidad de elementos, y luego se leen los elementos de la secuencia en sí. | ||
- | - <code>#include <iostream> | + | - <code cpp>#include <iostream> |
#include <vector> | #include <vector> | ||
Línea 71: | Línea 71: | ||
} | } | ||
</code> | </code> | ||
- | - <code>#include <iostream> | + | - <code cpp>#include <iostream> |
#include <vector> | #include <vector> | ||
Línea 95: | Línea 95: | ||
} | } | ||
</code> | </code> | ||
- | - <code>#include <iostream> | + | - <code cpp>#include <iostream> |
#include <vector> | #include <vector> | ||
Línea 144: | Línea 144: | ||
Si compilamos con [[curso-cpp:ambiente:oiax#configuracion_de_compilacion_con_geany|todos los warnings activados]], podremos observar que el compilador genera una advertencia cuando utilizamos ''.size()'' en una comparación con enteros. Por ejemplo en un simple recorrido: | Si compilamos con [[curso-cpp:ambiente:oiax#configuracion_de_compilacion_con_geany|todos los warnings activados]], podremos observar que el compilador genera una advertencia cuando utilizamos ''.size()'' en una comparación con enteros. Por ejemplo en un simple recorrido: | ||
- | <code> | + | <code cpp> |
for (int i = 0; i < v.size(); i++) | for (int i = 0; i < v.size(); i++) | ||
cout << v[i] << endl; | cout << v[i] << endl; | ||
Línea 153: | Línea 153: | ||
Si bien en este ejemplo es relativamente inofensivo, ignorar estas advertencias del compilador puede llevar a **graves errores** en otros casos (por ejemplo, si quisiéramos ignorar el último elemento, y cambiáramos la comparación ''i < v.size()'' por ''i < v.size() - 1'', nuestro programa podría colgarse o fallar de manera imprevista). **La solución práctica** a esto es **siempre que usemos ''.size()'' en una comparación**, rodear a ''v.size()'' de ''int(...)'', para indicarle al compilador que queremos que ''v.size()'' sea un ''int'' "normal". El ejemplo quedaría: | Si bien en este ejemplo es relativamente inofensivo, ignorar estas advertencias del compilador puede llevar a **graves errores** en otros casos (por ejemplo, si quisiéramos ignorar el último elemento, y cambiáramos la comparación ''i < v.size()'' por ''i < v.size() - 1'', nuestro programa podría colgarse o fallar de manera imprevista). **La solución práctica** a esto es **siempre que usemos ''.size()'' en una comparación**, rodear a ''v.size()'' de ''int(...)'', para indicarle al compilador que queremos que ''v.size()'' sea un ''int'' "normal". El ejemplo quedaría: | ||
- | <code> | + | <code cpp> |
for (int i = 0; i < int(v.size()); i++) | for (int i = 0; i < int(v.size()); i++) | ||
cout << v[i] << endl; | cout << v[i] << endl; | ||
Línea 166: | Línea 166: | ||
En lugar de hacer por ejemplo: | En lugar de hacer por ejemplo: | ||
- | <code> | + | <code cpp> |
for (int i=0; i<int(v.size()); i++) | for (int i=0; i<int(v.size()); i++) | ||
cout << v[i] << endl; | cout << v[i] << endl; | ||
Línea 173: | Línea 173: | ||
Podríamos equivalente utilizar el siguiente código: | Podríamos equivalente utilizar el siguiente código: | ||
- | <code> | + | <code cpp> |
for (int x : v) | for (int x : v) | ||
cout << x << endl; | cout << x << endl; | ||
Línea 194: | Línea 194: | ||
Hemos visto que podemos usar ''vector'' para representar listas de valores, en particular, listas de números. Una manera posible de trabajar con matrices en computación es considerarlas como listas **de filas**: En efecto, si miramos la primera fila del ejemplo anterior, no es más que una lista de 4 números: ''{1,2,5,8}''. Por lo tanto, esa primera fila podríamos guardarla en un ''vector<int>'' como los que ya hemos usado: | Hemos visto que podemos usar ''vector'' para representar listas de valores, en particular, listas de números. Una manera posible de trabajar con matrices en computación es considerarlas como listas **de filas**: En efecto, si miramos la primera fila del ejemplo anterior, no es más que una lista de 4 números: ''{1,2,5,8}''. Por lo tanto, esa primera fila podríamos guardarla en un ''vector<int>'' como los que ya hemos usado: | ||
- | <code> | + | <code cpp> |
vector<int> fila1 = {1,2,5,8}; | vector<int> fila1 = {1,2,5,8}; | ||
</code> | </code> | ||
Línea 200: | Línea 200: | ||
Y lo mismo ocurre con las demás filas: cada una es una lista de 4 elementos: | Y lo mismo ocurre con las demás filas: cada una es una lista de 4 elementos: | ||
- | <code> | + | <code cpp> |
vector<int> fila2 = {9,3,1,5}; | vector<int> fila2 = {9,3,1,5}; | ||
vector<int> fila3 = {30,5,3,4}; | vector<int> fila3 = {30,5,3,4}; | ||
Línea 209: | Línea 209: | ||
El código para guardar la matriz completa queda entonces: | El código para guardar la matriz completa queda entonces: | ||
- | <code> | + | <code cpp> |
vector<int> fila1 = {1,2,5,8}; | vector<int> fila1 = {1,2,5,8}; | ||
vector<int> fila2 = {9,3,1,5}; | vector<int> fila2 = {9,3,1,5}; | ||
Línea 218: | Línea 218: | ||
O incluso, podríamos haber escrito todas las listas directamente sin usar variables intermedias: | O incluso, podríamos haber escrito todas las listas directamente sin usar variables intermedias: | ||
- | <code> | + | <code cpp> |
vector<vector<int>> matriz = {{1,2,5,8}, {9,3,1,5}, {30,5,3,4}}; | vector<vector<int>> matriz = {{1,2,5,8}, {9,3,1,5}, {30,5,3,4}}; | ||
</code> | </code> | ||
Línea 224: | Línea 224: | ||
Es común en estos casos usar //enters// y espacios para mayor claridad: | Es común en estos casos usar //enters// y espacios para mayor claridad: | ||
- | <code> | + | <code cpp> |
vector<vector<int>> matriz = { {1,2,5,8}, | vector<vector<int>> matriz = { {1,2,5,8}, | ||
{9,3,1,5}, | {9,3,1,5}, | ||
Línea 237: | Línea 237: | ||
Hemos visto una manera de crear una matriz pequeña manualmente. ¿Cómo podríamos crear una matriz de ''N'' filas y ''M'' columnas? La siguiente sería una manera basada en las ideas que ya vimos: | Hemos visto una manera de crear una matriz pequeña manualmente. ¿Cómo podríamos crear una matriz de ''N'' filas y ''M'' columnas? La siguiente sería una manera basada en las ideas que ya vimos: | ||
- | <code> | + | <code cpp> |
vector<vector<int>> matriz(N); | vector<vector<int>> matriz(N); | ||
for (int i = 0; i < N; i++) | for (int i = 0; i < N; i++) | ||
Línea 247: | Línea 247: | ||
Una forma más práctica de lograr esto (aunque más avanzada de entender) es directamente usar la siguiente línea: | Una forma más práctica de lograr esto (aunque más avanzada de entender) es directamente usar la siguiente línea: | ||
- | <code> | + | <code cpp> |
vector<vector<int>> matriz(N, vector<int>(M)); | vector<vector<int>> matriz(N, vector<int>(M)); | ||
</code> | </code> |