📅  最后修改于: 2023-12-03 15:29:42.818000             🧑  作者: Mango
STL(Standard Template Library)是C++标准库的一部分,包含了许多常用的数据结构、算法和函数。STL的核心组件包括:容器、迭代器、算法和函数对象。下面我们将重点讲述它们的重要功能。
在STL中,容器是指用于存储和处理数据的类模板。C++标准库中的容器分为序列容器和关联容器两种。
vector是一个能够存储任意类型的动态数组,它可以自动扩展以容纳新元素。它的一些重要功能包括:
下面是一个创建和使用vector的例子:
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3};
v.push_back(4);
for (const int& x : v) {
std::cout << x << " ";
}
return 0;
}
deque是一个双端队列,它可以在两端进行快速插入和删除操作。它的一些重要功能包括:
下面是一个创建和使用deque的例子:
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq = {1, 2, 3};
dq.push_front(0);
dq.push_back(4);
for (const int& x : dq) {
std::cout << x << " ";
}
return 0;
}
list是一个双向链表,它可以在任意位置进行快速插入和删除操作。它的一些重要功能包括:
下面是一个创建和使用list的例子:
#include <list>
#include <iostream>
int main() {
std::list<int> lst = {1, 2, 3};
lst.push_front(0);
lst.push_back(4);
for (const int& x : lst) {
std::cout << x << " ";
}
return 0;
}
set是一个键值唯一、自动排序的集合。它的一些重要功能包括:
下面是一个创建和使用set的例子:
#include <set>
#include <iostream>
int main() {
std::set<int> s = {3, 2, 1};
s.insert(0);
for (const int& x : s) {
std::cout << x << " ";
}
return 0;
}
map是一个键值唯一、自动排序的关联数组。它的一些重要功能包括:
下面是一个创建和使用map的例子:
#include <map>
#include <iostream>
int main() {
std::map<std::string, int> m = {
{"apple", 1},
{"banana", 2},
{"cherry", 3}
};
m["pear"] = 4;
for (const auto& p : m) {
std::cout << p.first << " -> " << p.second << std::endl;
}
return 0;
}
迭代器是STL的核心组件,它将数据结构和算法隔离开来,使得算法不依赖于具体的数据结构。STL提供了多种迭代器,包括随机访问迭代器、双向迭代器和前向迭代器。
下面是一个使用迭代器的例子:
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
STL提供了多种常用算法,包括查找、排序和操作容器的算法。这些算法都是通过迭代器来实现的,因此它们可以应用于任何容器。
下面是一些常用算法的例子:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5};
std::sort(v.begin(), v.end());
for (const int& x : v) {
std::cout << x << " ";
}
std::cout << std::endl;
auto it = std::find(v.begin(), v.end(), 5);
if (it != v.end()) {
std::cout << "Found " << *it << std::endl;
}
return 0;
}
函数对象是一个类对象,它对应于一个函数或函数指针。STL中的函数对象可以作为算法的参数,使得算法可以处理任意类型的数据和任意的运算符。
下面是一个使用函数对象的例子:
#include <algorithm>
#include <vector>
#include <iostream>
struct IsEven {
bool operator()(int x) const {
return x % 2 == 0;
}
};
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
auto it = std::find_if(v.begin(), v.end(), IsEven());
if (it != v.end()) {
std::cout << "Found " << *it << std::endl;
}
return 0;
}
以上就是C++中STL组件的重要功能的介绍,它们为我们的编程提供了很多便利,也让我们的代码更加简洁易读。