Namespaces
Variants

std::map<Key,T,Compare,Allocator>:: end, std::map<Key,T,Compare,Allocator>:: cend

From cppreference.net

iterator end ( ) ;
(1) (noexcept seit C++11)
(constexpr seit C++26)
const_iterator end ( ) const ;
(2) (noexcept seit C++11)
(constexpr seit C++26)
const_iterator cend ( ) const noexcept ;
(3) (seit C++11)
(constexpr seit C++26)

Gibt einen Iterator zurück, der hinter dem letzten Element von * this liegt.

Dieser zurückgegebene Iterator fungiert lediglich als Sentinel. Es ist nicht garantiert, dass er dereferenzierbar ist.

range-begin-end.svg

Inhaltsverzeichnis

Rückgabewert

Iterator hinter dem letzten Element.

Komplexität

Konstante.

Hinweise

libc++ portiert cend() in den C++98-Modus zurück.

Beispiel

#include <iostream>
#include <map>
int main()
{
    std::map<int, float> num_map;
    num_map[4] = 4.13;
    num_map[9] = 9.24;
    num_map[1] = 1.09;
    // Ruft num_map.begin() und num_map.end() auf
    for (auto it = num_map.begin(); it != num_map.end(); ++it)
        std::cout << it->first << ", " << it->second << '\n';
}

Ausgabe:

1, 1.09
4, 4.13
9, 9.24

Beispiel mit einer benutzerdefinierten Vergleichsfunktion

#include <cmath>
#include <iostream>
#include <map>
struct Point { double x, y; };
// Vergleiche die x-Koordinaten zweier Point-Zeiger.
struct PointCmp
{
    bool operator()(const Point* lhs, const Point* rhs) const
    {
        return lhs->x < rhs->x; 
    }
};
int main()
{
    // Beachte: Obwohl die x-Koordinaten nicht in Reihenfolge sind,
    // wird die Map durch aufsteigende x-Koordinaten iteriert.
    Point points[3] = {{2, 0}, {1, 0}, {3, 0}};
    // mag ist eine Map, die die Adresse eines Knotens auf seine Magnitude in der x-y-Ebene abbildet.
    // Obwohl die Schlüssel Point-Zeiger sind, wollen wir die Map nach den
    // x-Koordinaten der Punkte ordnen und NICHT nach den Adressen der Points.
    // Dies wird durch die Vergleichsmethode der PointCmp-Klasse erreicht.
    std::map<Point*, double, PointCmp> mag(
        {{points, 2}, {points + 1, 1}, {points + 2, 3}}
    );
    // Ändere jede y-Koordinate von 0 zur Magnitude.
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first; // Zeiger auf Node
        cur->y = mag[cur]; // Hätte auch cur->y = iter->second; verwenden können
    }
    // Aktualisiere und gebe die Magnitude jedes Knotens aus.
    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';
    }
    // Wiederhole das obige mit der bereichsbasierten for-Schleife.
    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';
        // Beachte: Im Gegensatz zu std::cout << iter->second << '\n'; oben,
        // wird std::cout << i.second << '\n'; NICHT die aktualisierte Magnitude ausgeben.
        // Wenn stattdessen auto &i : mag verwendet wird, wird die aktualisierte Magnitude ausgegeben.
    }
}

Ausgabe:

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

Siehe auch

gibt einen Iterator auf den Anfang zurück
(öffentliche Elementfunktion)
(C++11) (C++14)
gibt einen Iterator auf das Ende eines Containers oder Arrays zurück
(Funktionstemplate)