STL-Algorithmen können durch die Verwendung von Funktionsobjekten erweitert werden, bei denen es sich um Klassen oder Strukturen mit Aufrufoperatoren (operator()) handelt. Sie müssen das Funktionsobjekt nur als Parameter des Algorithmus übergeben. Wenn Sie beispielsweise den Algorithmus std::sort zum Sortieren von Containern verwenden, können Sie das Funktionsobjekt std::greater<> übergeben. Mit dem Funktionsobjekt können wir den STL-Algorithmus anpassen, um flexiblere Anforderungen zu erfüllen, z. B. die Anpassung der Summationsfunktion, um die Exponentialfunktion auf die Summe der Elemente anzuwenden. Mithilfe des ExpSum-Funktionsobjekts kann 1^2 + 2^2 + 3^ konvertiert werden 2 + 4 Das Ergebnis von ^2 (30) wird zur Akkumulation an den std::accumulate-Algorithmus übergeben.
Die C++ Standard Template Library (STL) bietet viele leistungsstarke Algorithmen zur einfachen und effizienten Bearbeitung von Datensammlungen. Manchmal müssen wir diese Algorithmen jedoch an unsere spezifischen Bedürfnisse anpassen. Mit C++-Funktionsobjekten können wir STL-Algorithmen einfach erweitern, um diese Anpassung zu erreichen.
Funktionsobjekte
Ein Funktionsobjekt ist eine Klasse oder Struktur, die einen Aufrufoperator (operator()
) hat. Durch den Aufruf eines Funktionsobjekts können Sie einige Vorgänge genauso ausführen wie den Aufruf einer normalen Funktion. operator()
) 的类或结构。通过调用函数对象,可以像调用普通函数一样执行一些操作。
扩展 STL 算法
std::sort
算法并传递 std::greater<>
函数对象作为比较函数。std::vector<int> vec = {3, 1, 2, 4}; std::sort(vec.begin(), vec.end(), std::greater<>{});
[4, 3, 2, 1]
实战案例:自定义求和函数
以下实战案例展示了如何使用函数对象自定义 std::accumulate
STL-Algorithmen erweitern
🎜std::sort
verwenden und std::greater<> übergeben. Code > Funktionsobjekte als Vergleichsfunktionen.
struct ExpSum { int operator()(int a, int b) const { return a + std::pow(b, 2); } }; int main() { std::vector<int> vec = {1, 2, 3, 4}; int sum = std::accumulate(vec.begin(), vec.end(), 0, ExpSum{}); std::cout << sum << std::endl; // 输出:30(1^2 + 2^2 + 3^2 + 4^2) }
[4, 3, 2, 1]
std::accumulate
-Algorithmus anpassen, um die Summe der Elemente in einem Container zu berechnen und eine Exponentialfunktion anzuwenden: 🎜rrreee🎜Mit dieser Methode Wir können benutzerdefinierte Logik in STL-Algorithmen integrieren, um die Flexibilität zu erhöhen und unsere spezifischen Anforderungen zu erfüllen. 🎜Das obige ist der detaillierte Inhalt vonWie erweitert man STL-Algorithmen mithilfe von C++-Funktionsobjekten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!