std::map<Key,T,Compare,Allocator>:: begin, std::map<Key,T,Compare,Allocator>:: cbegin
From cppreference.net
|
iterator begin
(
)
;
|
(1) |
(noexcept начиная с C++11)
(constexpr начиная с C++26) |
|
const_iterator begin
(
)
const
;
|
(2) |
(noexcept начиная с C++11)
(constexpr начиная с C++26) |
|
const_iterator cbegin
(
)
const
noexcept
;
|
(3) |
(начиная с C++11)
(constexpr начиная с C++26) |
Возвращает итератор на первый элемент * this .
Если * this пуст, возвращаемый итератор будет равен end() .
Содержание |
Возвращаемое значение
Итератор на первый элемент.
Сложность
Константа.
Примечания
libc++ переносит обратно
cbegin()
в режим 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)
|
возвращает итератор на конец
(публичная функция-член) |
|
(C++11)
(C++14)
|
возвращает итератор на начало контейнера или массива
(шаблон функции) |