std::map<Key,T,Compare,Allocator>:: end, std::map<Key,T,Compare,Allocator>:: cend
From cppreference.net
|
iterator end
(
)
;
|
(1) |
(noexcept начиная с C++11)
(constexpr начиная с C++26) |
|
const_iterator end
(
)
const
;
|
(2) |
(noexcept начиная с C++11)
(constexpr начиная с C++26) |
|
const_iterator cend
(
)
const
noexcept
;
|
(3) |
(начиная с C++11)
(constexpr начиная с C++26) |
Возвращает итератор за последним элементом * this .
Этот возвращённый итератор действует только как sentinel. Не гарантируется, что он будет dereferenceable .
Содержание |
Возвращаемое значение
Итератор за последним элементом.
Сложность
Константа.
Примечания
libc++ обратно портирует
cend()
в режим C++98.
Пример
Запустить этот код
Вывод:
1, 1.09 4, 4.13 9, 9.24
Пример использования пользовательской функции сравнения
Запустить этот код
#include <cmath> #include <iostream> #include <map> struct Point { double x, y; }; // Сравнение x-координат двух указателей на Point. struct PointCmp { bool operator()(const Point* lhs, const Point* rhs) const { return lhs->x < rhs->x; } }; int main() { // Обратите внимание, что хотя x-координаты не упорядочены, // итерация по map будет выполняться по возрастанию x-координат. Point points[3] = {{2, 0}, {1, 0}, {3, 0}}; // mag - это map, связывающая адрес узла с его величиной в плоскости x-y. // Хотя ключи являются указателями на Point, мы хотим упорядочить map по // x-координатам точек, а НЕ по адресам Point. Это достигается // использованием метода сравнения класса PointCmp. std::map<Point*, double, PointCmp> mag( {{points, 2}, {points + 1, 1}, {points + 2, 3}} ); // Изменяем каждую y-координату с 0 на величину. for (auto iter = mag.begin(); iter != mag.end(); ++iter) { auto cur = iter->first; // Указатель на Node cur->y = mag[cur]; // Можно было также использовать cur->y = iter->second; } // Обновляем и выводим величину каждого узла. for (auto iter = mag.begin(); iter != mag.end(); ++iter) { auto cur = iter->first; mag[cur] = std::hypot(cur->x, cur->y); std::cout << "The magnitude of (" << cur->x << ", " << cur->y << ") is "; std::cout << iter->second << '\n'; } // Повторяем вышеописанное с использованием range-based for loop. for (auto i : mag) { auto cur = i.first; cur->y = i.second; mag[cur] = std::hypot(cur->x, cur->y); std::cout << "The magnitude of (" << cur->x << ", " << cur->y << ") is "; std::cout << mag[cur] << '\n'; // В отличие от std::cout << iter->second << '\n'; выше, // std::cout << i.second << '\n'; НЕ выведет обновленную величину. // Если бы использовалось auto &i : mag, это вывело бы обновленную величину. } }
Вывод:
The magnitude of (1, 1) is 1.41421 The magnitude of (2, 2) is 2.82843 The magnitude of (3, 3) is 4.24264 The magnitude of (1, 1.41421) is 1.73205 The magnitude of (2, 2.82843) is 3.4641 The magnitude of (3, 4.24264) is 5.19615
Смотрите также
|
(C++11)
|
возвращает итератор на начало
(public member function) |
|
(C++11)
(C++14)
|
возвращает итератор на конец контейнера или массива
(function template) |