From cppreference.com
referenceoperator[](size_typepos); (1)(constexpr since C++20)const_referenceoperator[](size_typepos)const; (2)(constexpr since C++20)Returns a reference to the element at specified location pos. No bounds checking is performed, unless the implementation is hardened(since C++26).
If pos<size() is false, the behavior is undefined.
(until C++26)If pos<size() is false:
If the implementation is
, a
occurs.
If the implementation is not hardened, the behavior is undefined.
(since C++26)Parameters
pos - position of the element to return Return value
Reference to the requested element.
Complexity
Constant.
Notes
Unlike
, this operator never inserts a new element into the container. Accessing a nonexistent element through this operator is undefined behavior, unless the implementation is hardened(since C++26).
Example
The following code uses operator[] to read from and write to a std::vector<int>:
Run this code
#include<vector>#include<iostream>intmain(){std::vector<int>numbers{2,4,6,8};std::cout<<"Second element: "<<numbers[1]<<'\n';numbers[0]=5;std::cout<<"All numbers:";for(autoi:numbers)std::cout<<' '<<i;std::cout<<'\n';}// Since C++20 std::vector can be used in constexpr context:#if defined(__cpp_lib_constexpr_vector) and defined(__cpp_consteval)// Gets the sum of all primes in [0, N) using sieve of Eratosthenesconstevalautosum_of_all_primes_up_to(unsignedN){if(N<2)return0ULL;std::vector<bool>is_prime(N,true);is_prime[0]=is_prime[1]=false;autopropagate_non_primality=[&](decltype(N)n){for(decltype(N)m=n+n;m<is_prime.size();m+=n)is_prime[m]=false;};autosum{0ULL};for(decltype(N)n{2};n!=N;++n)if(is_prime[n]){sum+=n;propagate_non_primality(n);}returnsum;}//< vector's memory is released herestatic_assert(sum_of_all_primes_up_to(42)==0xEE);static_assert(sum_of_all_primes_up_to(100)==0x424);static_assert(sum_of_all_primes_up_to(1001)==76127);#endifOutput:
Second element: 4 All numbers: 5 4 6 8 See also
access specified element with bounds checking
(public member function)