Difference between revisions of "Template:cpp/container/at"
From cppreference.com
WitsanChen (Talk | contribs) |
m (→Example: fix the output.) |
||
(23 intermediate revisions by 5 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 ); | |
− | | | + | |
− | constexpr 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 | since={{cpp/std|{{ | + | {{dcl|num=1|since={{cpp/std|{{#var:cont}}}}| |
− | reference | + | reference at( size_type pos ); |
}} | }} | ||
− | {{dcl | 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 38: | Line 39: | ||
{{dcl end}} | {{dcl end}} | ||
− | + | Returns a reference to the element at specified location {{c|pos}}, with bounds checking. | |
− | + | 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=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | pos | position of the element to return}} | + | {{par|pos|position of the element to return}} |
{{par end}} | {{par end}} | ||
===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= | |
+ | #include <chrono> | ||
+ | #include <cstddef> | ||
#include <iostream> | #include <iostream> | ||
− | #include <{{ | + | #include <{{#var:cont}}> |
+ | #include <stdexcept> | ||
int main() | int main() | ||
{ | { | ||
− | std::{{ | + | {{#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 74: | Line 91: | ||
std::cout << "data size = " << data.size() << '\n'; | std::cout << "data size = " << data.size() << '\n'; | ||
− | try { | + | try |
− | // | + | { |
− | data.at( | + | // Try to set an element at random position >= size() |
− | } catch (std::out_of_range | + | auto moon_phase = [] |
− | std::cout << | + | { |
+ | 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'; | ||
} | } | ||
Line 84: | Line 108: | ||
std::cout << "data:"; | std::cout << "data:"; | ||
for (int elem : data) | for (int elem : data) | ||
− | std::cout << | + | std::cout << ' ' << elem; |
std::cout << '\n'; | std::cout << '\n'; | ||
} | } | ||
− | | p=true | + | |p=true |
− | | output= | + | |output= |
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 102: | 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> )
|