Introducción
En este laboratorio, aprenderá sobre los arrays en C++. Aprenderá cómo definir e inicializar arrays y cómo utilizar funciones de array.
En este laboratorio, aprenderá sobre los arrays en C++. Aprenderá cómo definir e inicializar arrays y cómo utilizar funciones de array.
Los arrays se utilizan comúnmente para almacenar datos del mismo tipo. Son eficientes, compactos y fáciles de acceder. Combinados con un bucle, las operaciones sobre los elementos de un array son bastante simples.
Para crear un array, es necesario conocer con antelación la longitud (o tamaño) del array y asignar memoria en consecuencia. Una vez creado, su longitud es fija y no se puede cambiar.

Supongamos que desea calcular el promedio de las notas de una clase de 30 estudiantes. Seguramente no querrá crear 30 variables: mark1, mark2,..., mark30. En cambio, puede usar una sola variable, llamada array, con 30 elementos.
Un array es una lista de elementos del mismo tipo, identificada por un par de corchetes [ ]. Para usar un array, debe declarar el array con tres cosas: un nombre, un tipo y una dimensión (o tamaño, o longitud). Recomendamos usar un nombre en plural para el array, por ejemplo, marks, rows, numbers. Por ejemplo:
int marks[5]; // Declare an int array called marks with 5 elements
double numbers[10]; // Declare an double array of 10 elements
const int SIZE = 9;
float temps[SIZE]; // Use const int as array length
// Some compilers support an variable as array length, e.g.,
int size;
cout << "Enter the length of the array: ";
cin >> size;
float values[size];
Tenga en cuenta que, en C++, los valores de los elementos no están definidos después de la declaración.
También puede inicializar el array durante la declaración con una lista de valores separados por comas, como sigue:
// Declare and initialize an int array of 3 elements
int numbers[3] = {11, 33, 44};
// If length is omitted, the compiler counts the elements
int numbers[] = {11, 33, 44};
// Number of elements in the initialization shall be equal to or less than length
int numbers[5] = {11, 33, 44}; // Remaining elements are zero. Confusing! Don't do this
int numbers[2] = {11, 33, 44}; // ERROR: too many initializers
// Use {0} or {} to initialize all elements to 0
int numbers[5] = {0}; // First element to 0, the rest also to zero
int numbers[5] = {}; // All element to 0 too
/* Test local array initialization */
#include <iostream>
using namespace std;
int main() {
int const SIZE = 5;
int a1[SIZE]; // Uninitialized
for (int i = 0; i < SIZE; ++i) cout << a1[i] << " ";
cout << endl; //?????
int a2[SIZE] = {21, 22, 23, 24, 25}; // All elements initialized
for (int i = 0; i < SIZE; ++i) cout << a2[i] << " ";
cout << endl; // 21 22 23 24 25
int a3[] = {31, 32, 33, 34, 35}; // Size deduced from init values
int a3Size = sizeof(a3)/sizeof(int);
cout << "Size is " << a3Size << endl; // 5
for (int i = 0; i < a3Size; ++i) cout << a3[i] << " ";
cout << endl; // 31 32 33 34 35
int a4[SIZE] = {41, 42}; // Leading elements initialized, the rests to 0
for (int i = 0; i < SIZE; ++i) cout << a4[i] << " ";
cout << endl; // 41 42 0 0 0
int a5[SIZE] = {0}; // First elements to 0, the rests to 0 too
for (int i = 0; i < SIZE; ++i) cout << a5[i] << " ";
cout << endl; // 0 0 0 0 0
int a6[SIZE] = {}; // All elements to 0 too
for (int i = 0; i < SIZE; ++i) cout << a6[i] << " ";
cout << endl; // 0 0 0 0 0
for (int i=0;i<5;i++){
// assign a value for each element of the array, like this
a6[i] = i;
cout << a6[i] << " ";
}
}
Salida:
6299128 0 485160213 32595 0 ## some unexpected values
21 22 23 24 25
Size is 5
31 32 33 34 35
41 42 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 2 3 4

Puede encontrar la longitud del array usando la expresión sizeof(arrayName)/sizeof(arrayName[0]), donde sizeof(arrayName) devuelve los bytes totales del array y sizeof(arrayName[0]) devuelve los bytes del primer elemento.
Los arrays trabajan en conjunto con los bucles. Puede procesar todos los elementos de un array a través de un bucle. C++11 introduce un bucle for basado en un rango (o bucle for-each) para iterar a través de un array, por ejemplo:
/* Testing For-each loop */
#include <iostream>
using namespace std;
int main() {
int numbers[] = {11, 22, 33, 44, 55};
// Para cada miembro llamado number del array numbers - solo lectura
for (int number : numbers) {
cout << number << " ";
}
// Para modificar los miembros, se necesita usar una referencia (&)
for (int &number : numbers) {
number = 99;
}
for (int number : numbers) {
cout << number << endl;
}
return 0;
}
Salida:
11 22 33 44 55
99 99 99 99 99

Por ejemplo:
int[2][3] = { {11, 22, 33}, {44, 55, 66} };

/* Test Multi-dimensional Array */
#include <iostream>
using namespace std;
void printArray(const int[][3], int);
int main() {
int myArray[][3] = {{8, 2, 4}, {7, 5, 2}}; // 2x3 inicializado
// Solo el primer índice puede omitirse e implicarse
printArray(myArray, 2);
return 0;
}
// Imprime el contenido del array de 3 columnas por filas (las columnas son fijas)
void printArray(const int array[][3], int rows) {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < 3; ++j) {
cout << array[i][j] << " ";
}
cout << endl;
}
}
Salida:
8 2 4
7 5 2

En C, una cadena es un array de char terminado por un carácter nulo '\0' (código ASCII de Hex 0). C++ proporciona una nueva clase string en el encabezado <string>. La cadena original en C se conoce como C-String (o C-style String o Character String). Puede asignar una C-cadena de la siguiente manera:
char message[256]; // Declare a char array
// Can hold a C-String of up to 255 characters terminated by '\0'
char str1[] = "Hello"; // Declare and initialize with a "string literal".
// The length of array is number of characters + 1 (for '\0').
char str1char[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // Same as above
char str2[256] = "Hello"; // Length of array is 256, keeping a smaller string.
Para los novatos, evite las C-cadenas. Utilice string de C++ (en el encabezado <string>) discutido anteriormente.
Puede usar cin y cout para manejar C-cadenas.
cin << lee una cadena delimitada por espacios en blanco;cin.getline(*var*, *size*) lee una cadena en var hasta el carácter de nueva línea de longitud hasta size-1, descartando el carácter de nueva línea (reemplazado por '\0'). El *size* generalmente corresponde a la longitud del array de C-cadena.cin.get(*var*, *size*) lee una cadena hasta el carácter de nueva línea, pero deja el carácter de nueva línea en el búfer de entrada.cin.get(), sin argumentos, lee el siguiente carácter./* Test C-string */
#include <iostream>
using namespace std;
int main() {
char msg[256]; // Hold a string of up to 255 characters (terminated by '\0')
cout << "Enter a message (with space)" << endl;
cin.getline(msg, 256); // Read up to 255 characters into msg
cout << msg << endl;
// Access via null-terminated character array
for (int i = 0; msg[i]!= '\0'; ++i) {
cout << msg[i];
}
cout << endl;
cout << "Enter a word (without space)" << endl;
cin >> msg;
cout << msg << endl;
// Access via null-terminated character array
for (int i = 0; msg[i]!= '\0'; ++i) {
cout << msg[i];
}
cout << endl;
return 0;
}
Salida:
Enter a message (with space)
hello, how are you?
hello, how are you?
hello, how are you?
Enter a word (without space)
helloworld
helloworld
helloworld

C/C++ no realiza una verificación de límites de índice para los arrays. En otras palabras, si el índice está fuera de los límites del array, no emite una advertencia/o error. Sin embargo, es necesario estimar la longitud y asignar un límite superior. Este es probablemente el principal inconveniente de usar un array. C++ tiene una clase plantilla vector (y C++11 agregó una clase plantilla array), que admite arrays con capacidad dinámica de redimensionamiento.