std::unordered_set::end,(3)
π std::unordered_set::end,(3) π
okay so this page is from the C++ Standard Libary (their spelling, not mine, bestie) and it's all about std::unordered_set::end,(3). it's giving "tiny iterator page, huge main-character energy" β¨
π©· NAME π©·
std::unordered_set::end, β that's the name. the original literally spells it out as std::unordered_set::end, - std::unordered_set::end,, so we're keeping that exact comma moment. periodt π
β¨ Synopsis β¨
here's the whole squad, all noexcept, all since C++11:
iterator end() noexcept; (1) (since C++11)
const_iterator end() const noexcept; (2) (since C++11)
const_iterator cend() const noexcept; (3) (since C++11)
Returns an iterator to the element following the last element of the unordered_set.
This element acts as a placeholder; attempting to access it results in undefined behavior. no cap, do not dereference it β that's the undefined-behavior danger zone π
there's also a diagram named range-begin-end.svg in the original, just vibing there as a visual aid π¦
πΈ Parameters πΈ
(none) β literally none, bestie. zero parameters. nada. π
π Return value π
Iterator to the element following the last element. that's the whole return value, iconic and to the point π
π¦ Complexity π¦
Constant. lowkey the easiest complexity check ever π
π Notes π
Because both iterator and const_iterator are constant iterators (and may in fact be the same type), it is not possible to mutate the elements of the container through an iterator returned by any of these member functions. so yes, bestie, these iterators are look-only β no sneaky mutation through them π«Ά
π Example π
the original says // Run this code, so here's the code block, exactly as it appears (line wraps in the comments and all β I'm not fixing the manpage's formatting, I'm just delivering the facts π):
// Run this code
#include <iostream>
#include <unordered_set>
struct Point { double x, y; };
int main()
{
Point pts[3] = {{1, 0}, {2, 0}, {3, 0}};
// points is a set containing the addresses of points
std::unordered_set<Point*> points = { pts, pts + 1, pts + 2 };
// Change each y-coordinate of (i, 0) from 0 into i^2 and print the
point
for (auto iter = points.begin(); iter != points.end(); ++iter)
{
(*iter)->y = ((*iter)->x) * ((*iter)->x); // iter is a pointer-
to-Point*
std::cout << "(" << (*iter)->x << ", " << (*iter)->y << ") ";
}
std::cout << '\n';
// Now using the range-based for loop, we increase each y-
coordinate by 10
for (Point* i : points)
{
i->y += 10;
std::cout << "(" << i->x << ", " << i->y << ") ";
}
}
β Possible output: β
(3, 9) (1, 1) (2, 4)
(3, 19) (1, 11) (2, 14)
π See also π
beginβ returns an iterator to the beginningcbeginβ (public member function)endcendβ returns an iterator to the end of a container or array(C++11)β (function template)(C++14)
that's the whole page, bestie π it came from http://cppreference.com, version 2024.06.10, with footer title std::unordered_set::end,(3). mwah, go dereference something safe (not end(), obviously) πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms