📅  最后修改于: 2023-12-03 15:14:01.860000             🧑  作者: Mango
C++标准库中的STL(Standard Template Library)是一组容器、算法和迭代器的模板类和函数。STL的目的是提供一种简单而高效的方法来编写复杂的程序,同时减少代码中的错误和冗余。下面将介绍STL的一些重要功能:
STL提供了多种容器类型,如数组、链表、向量、栈和队列等。这些容器都是模板类,因此可以用于存储各种数据类型。以下是STL中常用的几种容器:
vector是一种动态数组,可以在运行时改变其大小。它支持常数时间的随机访问和常数时间的插入和删除操作。以下是vector的一些常用操作:
#include <vector>
using namespace std;
vector<int> myvector; // 声明一个空的vector
// 向vector中添加元素
myvector.push_back(1);
myvector.push_back(2);
myvector.push_back(3);
// 访问vector元素
cout << myvector[0] << endl; // 输出1
// 删除vector中的元素
myvector.erase(myvector.begin() + 1);
// 迭代访问vector中的元素
for (auto it = myvector.begin(); it != myvector.end(); ++it) {
cout << *it << endl;
}
map是一种关联容器,保存的元素是一个key-value对。map中的元素按照key的大小自动排序,并且支持常数时间的插入和查找操作。以下是map的一些常用操作:
#include <map>
using namespace std;
map<string, int> mymap; // 声明一个空的map
// 向map中添加元素
mymap["apple"] = 1;
mymap["orange"] = 2;
mymap["banana"] = 3;
// 访问map元素
cout << mymap["apple"] << endl; // 输出1
// 删除map中的元素
mymap.erase("orange");
// 迭代访问map中的元素
for (auto it = mymap.begin(); it != mymap.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
STL中的迭代器是一种能够以一致的方式遍历各种容器的对象。迭代器可以理解为一个指向容器中元素的指针,可以逐个访问容器中的元素。以下是迭代器的一些常用操作:
#include <vector>
using namespace std;
vector<int> myvector = {1, 2, 3, 4, 5};
// 迭代访问vector中的元素
for (auto it = myvector.begin(); it != myvector.end(); ++it) {
cout << *it << endl;
}
// 反向迭代访问vector中的元素
for (auto it = myvector.rbegin(); it != myvector.rend(); ++it) {
cout << *it << endl;
}
STL中提供了丰富的算法,如排序、查找、复制、交集运算等。这些算法都是模板函数,因此可以用于不同类型的容器。以下是STL中常用的一些算法:
sort是一种排序算法,可以对容器中的元素进行升序或降序排序。以下是sort的一个例子:
#include <algorithm>
#include <vector>
using namespace std;
vector<int> myvector = {3, 1, 4, 1, 5, 9};
// 对vector中的元素进行升序排序
sort(myvector.begin(), myvector.end());
// 输出排序后的vector
for (auto it = myvector.begin(); it != myvector.end(); ++it) {
cout << *it << " ";
}
// 输出1 1 3 4 5 9
find是一种查找算法,可以在容器中查找一个指定的元素。以下是find的一个例子:
#include <algorithm>
#include <vector>
using namespace std;
vector<int> myvector = {3, 1, 4, 1, 5, 9};
// 查找vector中是否存在元素4
auto it = find(myvector.begin(), myvector.end(), 4);
// 输出查找结果
if (it != myvector.end()) {
cout << "4 found at position " << it - myvector.begin() << endl;
} else {
cout << "4 not found" << endl;
}
// 输出4 found at position 2
STL提供了一组强大而且高效的容器、算法和迭代器,可以使我们的代码更加简洁和易于维护。无论是处理简单的数据结构还是复杂的算法,都可以从STL中找到适合的工具。