C++ <array> operador operator[]
C++ clase de contenedor <array>
Entre todas las formas de acceder a los elementos de array,operator[]es la más común y directa, igual que acceder a un array normal.
operator[]Es el operador de subíndice de la clase contenedor, utilizado paradevolver el elemento en la posición especificada, pero no realiza comprobación de límites. Su uso es exactamente igual que el de un array de C normal.
operator[]Proporciona capacidad de acceso aleatorio similar a la de un array, permitiéndote acceder rápidamente a elementos en cualquier posición.
Significado de la palabra: operator[]Es el operador de subíndice; los corchetes son la marca del acceso a arrays.
Sintaxis básica y parámetros
operator[]Es una función miembro de la clase contenedor; úsalo igual que un array.
Formato de sintaxis
reference operator[](size_type pos); const_reference operator[](size_type pos) const;
Descripción de parámetros
- Parámetro:
pos- Tipo:
size_type(tipo entero sin signo, normalmentesize_t) - Descripción: la posición (índice) del elemento a acceder. El índice comienza en 0, el índice válido máximo es
size() - 1。
- Tipo:
Descripción de la función
- Valor de retorno: devuelve el elemento en la posición especificada como unareferencia. Si el contenedor es constante, devuelve una referencia constante.
- Efecto: Devuelve el elemento en la posición especificada. No realiza comprobación de límites; el resultado de acceder fuera de los límites no está definido.
- Diferencia con at():
operator[]no realiza comprobación de límites, es ligeramente más rápido;at()sí realiza comprobación de límites y lanza una excepción cuando se sale de los límites.
Ejemplo
Vamos a dominar completamente, mediante una serie de ejemplos de simples a complejos,operator[]su uso.
Ejemplo 1: Uso básico - Acceso a elementos
Ejemplo
#include <array>
int main() {
// 1. Crear un array e inicializarlo
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
std::cout << "El tamaño del array es: " << numbers.size() << std::endl;
// 2. Usar operator[] para acceder a los elementos
std::cout << "Primer elemento << numbers[0] << std::endl;
std::cout << "Segundo elemento << numbers[1] << std::endl;
std::cout << "Tercer elemento << numbers[2] << std::endl;
std::cout << "Último elemento << numbers[4] << std::endl;
// 3. Usar un bucle para acceder a todos los elementos
std::cout << "Todos los elementos: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
Salida esperada:
array的大小是: 5 第一个元素 [0]: 10 第二个元素 [1]: 20 第三个元素 [2]: 30 最后一个元素 [4]: 50 所有元素: 10 20 30 40 50
Análisis del código:
numbers[0]Devuelve el primer elemento10(el índice comienza en 0).numbers[4]Devuelve el último elemento50(porquesize()es 5, los índices válidos son 0-4).- Usando un bucle y
operator[]se pueden recorrer todos los elementos; el uso es exactamente igual que un array de C.
Ejemplo 2: Modificar el valor de un elemento
operator[]Devuelve una referencia, por lo que se puede utilizar para modificar el valor del elemento.
Ejemplo
#include <array>
int main() {
std::array<int, 3> numbers = {10, 20, 30};
std::cout << "Antes de modificar: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// Usar operator[] para obtener la referencia y modificar el elemento
numbers[0] = 100;
numbers[1] = 200;
numbers[2] = 300;
std::cout << "Después de modificar: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
Salida esperada:
修改前: 10 20 30 修改后: 100 200 300
Análisis del código:
numbers[0] = 100;Se modificó el valor del primer elemento mediante la referencia.- Esto demuestra que
operator[]devuelve una referencia lvalue modificable.
Ejemplo 3: Bucle for basado en rango
Se puede usar un bucle for basado en rango para recorrer el array.
Ejemplo
#include <array>
#include <string>
int main() {
std::array<std::string, 3> names = {"Alice", "Bob", "Charlie"};
std::cout << "Todos los elementos: ";
for(const auto& name : names) {
std::cout << name << " ";
}
std::cout << std::endl;
return 0;
}
Salida esperada:
所有元素: Alice Bob Charlie
Análisis del código:
- El bucle for basado en rango es una forma concisa de acceder a los elementos del array.
- y
operator[]En comparación, el código es más conciso y fácil de leer.
Ejemplo 4: Calcular el producto punto de vectores
Usaroperator[]para implementar operaciones vectoriales.
Ejemplo
#include <array>
// Calcular el producto punto de dos vectores
int dotProduct(const std::array<int, 3>& v1, const std::array<int, 3>& v2) {
int result = 0;
for(size_t i = 0; i < v1.size(); ++i) {
result += v1[i] * v2[i];
}
return result;
}
int main() {
std::array<int, 3> v1 = {1, 2, 3};
std::array<int, 3> v2 = {4, 5, 6};
int result = dotProduct(v1, v2);
std::cout << "Vector v1: ";
for(size_t i = 0; i < v1.size(); ++i) {
std::cout << v1[i] << " ";
}
std::cout << std::endl;
std::cout << "Vector v2: ";
for(size_t i = 0; i < v2.size(); ++i) {
std::cout << v2[i] << " ";
}
std::cout << std::endl;
std::cout << "Producto punto: " << result << std::endl;
// 1*4 + 2*5 + 3*6 = 4 + 10 + 18 = 32
return 0;
}
Salida esperada:
向量 v1: 1 2 3 向量 v2: 4 5 6 点积: 32
Análisis del código:
- Usar
operator[]permite acceder rápidamente a los elementos del array en algoritmos. - El cálculo del producto punto consiste en multiplicar los elementos en las posiciones correspondientes y luego sumarlos.
Otras extensiones