C++ <array> operador operator[]

C++ 容器类 <array>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 essize() - 1。

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 <iostream>
#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:

  1. numbers[0]Devuelve el primer elemento10(el índice comienza en 0).
  2. numbers[4]Devuelve el último elemento50(porquesize()es 5, los índices válidos son 0-4).
  3. Usando un bucle yoperator[]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 <iostream>
#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 queoperator[]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 <iostream>
#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.
  • yoperator[]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 <iostream>
#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:

  • Usaroperator[]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.

C++ 容器类 <array>C++ clase de contenedor <array>

Otras extensiones