Difference between revisions of "Template:cpp/container/at"
From cppreference.com
(→Example) |
m (→Example: fix the output.) |
||
(17 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{#vardefine:cont|{{{1|inplace_vector}}}}}<!-- |
− | {{cpp/container/{{ | + | -->{{cpp/container/{{#var:cont}}/title|at}} |
+ | {{cpp/container/{{#var:cont}}/navbar}} | ||
{{dcl begin}} | {{dcl begin}} | ||
− | {{#switch:{{ | + | {{#switch:{{#var:cont}} |
− | {{dcl | + | |array= |
− | | | + | {{dcl|num=1|since=c++11|notes={{mark constexpr since c++17}}| |
reference at( size_type pos ); | reference at( size_type pos ); | ||
− | |||
− | |||
}} | }} | ||
− | {{dcl | + | {{dcl|num=2|since=c++11|notes={{mark constexpr since c++14}}| |
− | | | + | |
const_reference at( size_type pos ) const; | const_reference at( size_type pos ) const; | ||
− | |||
− | |||
}} | }} | ||
|vector= | |vector= | ||
− | {{dcl | + | {{dcl|num=1|notes={{mark constexpr since c++20}}| |
− | | | + | |
reference at( size_type pos ); | reference at( size_type pos ); | ||
− | |||
− | |||
}} | }} | ||
− | {{dcl | + | {{dcl|num=2|notes={{mark constexpr since c++20}}| |
− | | | + | |
const_reference at( size_type pos ) const; | const_reference at( size_type pos ) const; | ||
− | | | + | }} |
+ | |inplace_vector= | ||
+ | {{dcl|num=1|since=c++26| | ||
+ | constexpr reference at( size_type pos ); | ||
+ | }} | ||
+ | {{dcl|num=2|since=c++26| | ||
constexpr const_reference at( size_type pos ) const; | constexpr const_reference at( size_type pos ) const; | ||
+ | }} | ||
+ | |span= | ||
+ | {{dcl|since=c++26| | ||
+ | constexpr reference at( size_type pos ) const; | ||
}} | }} | ||
| | | | ||
− | {{dcl|num=1|since={{cpp/std|{{ | + | {{dcl|num=1|since={{cpp/std|{{#var:cont}}}}| |
− | reference | + | reference at( size_type pos ); |
}} | }} | ||
− | {{dcl|num=2|since={{cpp/std|{{ | + | {{dcl|num=2|since={{cpp/std|{{#var:cont}}}}| |
const_reference at( size_type pos ) const; | const_reference at( size_type pos ) const; | ||
}} | }} | ||
Line 40: | Line 41: | ||
Returns a reference to the element at specified location {{c|pos}}, with bounds checking. | Returns a reference to the element at specified location {{c|pos}}, with bounds checking. | ||
− | If {{c|pos}} is not within the range of the container, an exception of type {{lc|std::out_of_range}} is thrown. | + | If {{c|pos}} is not within the range of the {{#switch:{{#var:cont}}|span=span|container}}, an exception of type {{lc|std::out_of_range}} is thrown. |
===Parameters=== | ===Parameters=== | ||
Line 48: | Line 49: | ||
===Return value=== | ===Return value=== | ||
− | Reference to the requested element. | + | Reference to the requested element, i.e. {{#ifeq:{{#var:cont}}|span|{{c|*(data() + pos)}}|{{c|*(a.begin() + pos)}}}}. |
===Exceptions=== | ===Exceptions=== | ||
− | {{lc|std::out_of_range}} if {{c| | + | {{lc|std::out_of_range}} if {{c|1=pos >= size()}}. |
===Complexity=== | ===Complexity=== | ||
Constant. | Constant. | ||
− | + | <!----> | |
+ | {{#ifeq:{{#var:cont}}|span| | ||
+ | ===Notes=== | ||
+ | {{feature test macro|__cpp_lib_span|std=C++26|value=202311L|{{tt|std::span::at}}}} | ||
+ | }} | ||
+ | <!----> | ||
===Example=== | ===Example=== | ||
{{example | {{example | ||
|code= | |code= | ||
+ | #include <chrono> | ||
+ | #include <cstddef> | ||
#include <iostream> | #include <iostream> | ||
− | #include < | + | #include <{{#var:cont}}> |
+ | #include <stdexcept> | ||
int main() | int main() | ||
{ | { | ||
− | + | {{#switch:{{#var:cont}} | |
+ | |deque|vector= | ||
+ | std::{{#var:cont}}<int> data{1, 2, 4, 5, 5, 6}; | ||
+ | |array|inplace_vector= | ||
+ | std::{{#var:cont}}<int, 6> data{1, 2, 4, 5, 5, 6}; | ||
+ | |span= | ||
+ | int x[]{1, 2, 4, 5, 5, 6}; | ||
+ | std::span data(x); | ||
+ | }} | ||
// Set element 1 | // Set element 1 | ||
Line 76: | Line 93: | ||
try | try | ||
{ | { | ||
− | // | + | // Try to set an element at random position >= size() |
− | auto | + | auto moon_phase = [] |
− | data.at( | + | { |
+ | return std::chrono::system_clock::now().time_since_epoch().count() % 8; | ||
+ | }; | ||
+ | data.at(data.size() + moon_phase()) = 13; | ||
} | } | ||
− | catch (std::out_of_range | + | catch(const std::out_of_range& ex) |
{ | { | ||
− | std::cout << | + | std::cout << ex.what() << '\n'; |
} | } | ||
Line 95: | Line 115: | ||
Element at index 2 has value 4 | Element at index 2 has value 4 | ||
data size = 6 | data size = 6 | ||
− | {{#switch:{{ | + | {{#switch:{{#var:cont}} |
− | |vector = vector::_M_range_check: __n (which is | + | |vector=vector::_M_range_check: __n (which is 8) >= this->size() (which is 6) |
− | |deque | + | |deque=deque::_M_range_check: __n (which is 8) >= this->size() (which is 6) |
− | |array | + | |array=array::at: __n (which is 8) >= _Nm (which is 6) |
− | |=std::out_of_range: pos >= size() | + | |#default=std::out_of_range: pos (which is 8) >= size() (which is 6) |
}} | }} | ||
data: 1 88 4 5 5 6 | data: 1 88 4 5 5 6 | ||
Line 106: | Line 126: | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc|cpp/container/dsc | + | {{dsc inc|cpp/container/dsc operator at|{{#var:cont}}}} |
{{dsc end}} | {{dsc end}} |
Latest revision as of 01:32, 16 August 2024
constexpr reference at( size_type pos ); |
(1) | (since C++26) |
constexpr const_reference at( size_type pos ) const; |
(2) | (since C++26) |
Returns a reference to the element at specified location pos, with bounds checking.
If pos is not within the range of the container, an exception of type std::out_of_range is thrown.
Contents |
[edit] Parameters
pos | - | position of the element to return |
[edit] Return value
Reference to the requested element, i.e. *(a.begin() + pos).
[edit] Exceptions
std::out_of_range if pos >= size().
[edit] Complexity
Constant.
[edit] Example
Run this code
#include <chrono> #include <cstddef> #include <iostream> #include <inplace_vector> #include <stdexcept> int main() { std::inplace_vector<int, 6> data{1, 2, 4, 5, 5, 6}; // Set element 1 data.at(1) = 88; // Read element 2 std::cout << "Element at index 2 has value " << data.at(2) << '\n'; std::cout << "data size = " << data.size() << '\n'; try { // Try to set an element at random position >= size() auto moon_phase = [] { return std::chrono::system_clock::now().time_since_epoch().count() % 8; }; data.at(data.size() + moon_phase()) = 13; } catch(const std::out_of_range& ex) { std::cout << ex.what() << '\n'; } // Print final values std::cout << "data:"; for (int elem : data) std::cout << ' ' << elem; std::cout << '\n'; }
Possible output:
Element at index 2 has value 4 data size = 6 std::out_of_range: pos (which is 8) >= size() (which is 6) data: 1 88 4 5 5 6
[edit] See also
access specified element (public member function of std::inplace_vector<T,N> )
|