# std::unordered_set<Key,Hash,KeyEqual,Allocator>::end, std::unordered_set<Key,Hash,KeyEqual,Allocator>::cend

< cpp‎ | container‎ | unordered set

iterator end() noexcept; |  | (C++11 起)
const_iterator end() const noexcept; |  | (C++11 起)
const_iterator cend() const noexcept; |  | (C++11 起)

返回指向 `unordered_set` 末元素后一元素的迭代器。

此元素表现为占位符；试图访问它导致未定义行为。

### 参数

（无）

### 返回值

指向后随最后元素的迭代器。

### 复杂度

常数。

### 注意

因为 `iterator` 和 `const_iterator` 都是常迭代器（而且实际上可以是同一类型），故不可能通过任何这些成员函数返回的迭代器修改容器元素。

### 示例

    #include <iostream>
    #include <unordered_set>

    struct Point { double x, y; };

    int main() {
        Point pts[3] = { {1, 0}, {2, 0}, {3, 0} };

        // points 是含有点的地址的 set
        std::unordered_set<Point *> points = { pts, pts + 1, pts + 2 };

        // 更改每个 (i, 0) 的 y 坐标从 0 到 i^2 并打印点
        for(auto iter = points.begin(); iter != points.end(); ++iter){
            (*iter)->y = ((*iter)->x) * ((*iter)->x); // iter 为指向 Point* 的指针
            std::cout << "(" << (*iter)->x << ", " << (*iter)->y << ") ";
        }
        std::cout << '\n';

        // 现在用基于范围的 for 循环，我们把每个 y 坐标增加 10
        for(Point * i : points) {
            i->y += 10;
            std::cout << "(" << i->x << ", " << i->y << ") ";
        }
    }

可能的输出：

    (3, 9) (1, 1) (2, 4)
    (3, 19) (1, 11) (2, 14)

### 参阅

begin cbegin (C++11) | 返回指向起始的迭代器 (公开成员函数)