STL C++: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
Zeile 145: Zeile 145:
   points["joe"] = 10;
   points["joe"] = 10;
}
}
</syntaxhighlight>
Konstruktoren:
* Es kann die Vergleichsfunktion als Parameter mitgegeben werden.
<syntaxhighlight lang="c++">
const std::map<std::string, int> init {
    {"this", 100},
    {"can", 100},
    {"be", 100},
    {"const", 100},
  };
  auto cmpLambda = [&mag](const Point &lhs, const Point &rhs) {
      return mag[lhs] < mag[rhs];
  };
  // You could also use a lambda that is not dependent on local variables, like this:
  // auto cmpLambda = [](const Point &lhs, const Point &rhs) { return lhs.y < rhs.y; };
  std::map<Point, double, decltype(cmpLambda)> magy(cmpLambda);
</syntaxhighlight>
</syntaxhighlight>



Version vom 8. Dezember 2022, 17:49 Uhr

Links

Container

Beispiele: vector, string

Zugriff/Manipulation

  • size_t length() Aktuelle Länge
  • size_t capacity() Liefert aktuell Puffergröße
  • void resize(size_t newLen, [char cc = '\0']) Setzt Länge durch Kürzen oder Auffüllen mit cc
  • reserve(size_t newSize): Setzt Kapazität
  • clear() Kürzt auf 0
  • bool empty() Test auf Leerstring
  • T & back() Letztes Element
  • T & front() erstes Element
  • append(data)
  • push_back(T cc) Element anfügen
  • T pop_back() Letztes Element entfernen und zurückgeben
  • insert(size_t pos, data)
  • emplace(size_t pos, T item) ein Element einfügen
  • emplace_back(T item) ein Element anhängen
  • iterator erase(size_t pos, size_t len) Löschen
  • iterator erase(iterator begin, iterator end) Löschen

Finden und Ersetzen

  • replace(pos, len, data)
  • size_t find(data) Substring finden
  • size_t rfind(data) Von hinten Substring finden
  • find_first_of(T item)
  • find_last_of(T item)

Iteratoren:

  • begin
  • end
  • rbegin Vom Ende her
  • rend
  • cbegin Ein const-Iterator
  • cend
  • crbegin
  • crend
#include <vector>
std::vector v;

for (auto rit=v.rbegin(); rit!=v.rend(); ++rit){
  std::cout << *rit;
}
for (auto it=v.begin(); it!=v.end(); ++it)[
    std::cout << *it;
}
for ( auto it=v.cbegin(); it!=v.cend(); ++it){
    std::cout << *it;
}

String

Konstruktoren:

Zugriff/Manipulation (außer Standard von Containern):

  • char& at(int position) Liefert Zeichen von Position
  • char& back() Letztes Zeichen
  • char& front() erstes Zeichen

Finden und Ersetzen

Konvertierung

#include <string>
std::string s;

for (auto rit=str.rbegin(); rit!=str.rend(); ++rit){
  std::cout << *rit;
}
for (auto it=str.begin(); it!=str.end(); ++it)[
    std::cout << *it;
}
for ( auto it=str.cbegin(); it!=str.cend(); ++it){
    std::cout << *it;
}

vector

std::vector<int> vec = {1,2,3,4,5};
std::cout << "vec backwards:";
for (auto rit = vec.crbegin(); rit != vec.crend(); ++rit)
  std::cout << ' ' << *rit;
std::cout << '\n';

deque

  • Aufwand einfügen vorn oder hinten ist gleich.
  • Funktionalität wie Vector

list

Doppelt verkettete Liste: Einfügen an jeder Stelle mit konstantem Aufwand.

forward_list

Einfach verkettete Liste: Einfügen an jeder Stelle mit konstantem Aufwand.

stack

  • Last in first out
  • Implementiert mit vector, deque und list

Funktionen:

  • empty()
  • size()
  • top()
  • push()
  • emplace
  • pop()
  • swap()

Map

Assoziatives Array, jeder Schlüssel nur einmal.

Operationen:

  • T& [key]: Erstellt Eintrag, wenn nicht vorhanden!
  • T at(K key) Speichern von Werten: map.at(key) = value; Analog zu map[key] = value;
  • iterator find(K key) https://cplusplus.com/reference/map/map/find/
  • iterator lower_bound(K key) Iterator zeigt auf größtes Element <= key
  • iterator upper_bound(K key) Iterator zeigt auf kleinstes Element >= key
#include <map>
std::map<string, int> points;

auto it = ;
if (points.find("joe") != points.end()){
  points["joe"] = 10;
}

Konstruktoren:

  • Es kann die Vergleichsfunktion als Parameter mitgegeben werden.
const std::map<std::string, int> init {
    {"this", 100},
    {"can", 100},
    {"be", 100},
    {"const", 100},
  };

  auto cmpLambda = [&mag](const Point &lhs, const Point &rhs) {
      return mag[lhs] < mag[rhs];
  };
  // You could also use a lambda that is not dependent on local variables, like this:
  // auto cmpLambda = [](const Point &lhs, const Point &rhs) { return lhs.y < rhs.y; };
  std::map<Point, double, decltype(cmpLambda)> magy(cmpLambda);

RegExpr