📅  最后修改于: 2023-12-03 15:13:11.378000             🧑  作者: Mango
C++ STL是C++ Standard Library的缩写,它是一套高效、强大、可靠的C++标准库。C++ STL中库的种类很多,可以满足不同开发场景的需求。在本文中,我们将介绍一些常用的C++ STL库,即容器、算法、迭代器、函数对象等。
vector是一种动态数组,它可以自动扩容。它支持随机访问,但是在中间插入/删除元素时效率较低。以下是定义一个vector并初始化的样例代码:
#include <vector>
using namespace std;
vector<int> myVector = {1, 2, 3, 4};
list是一种双向链表,它支持在任何位置高效地插入/删除元素,但是不支持随机访问。以下是定义一个list并初始化的样例代码:
#include <list>
using namespace std;
list<int> myList = {1, 2, 3, 4};
deque是一种双端队列,支持在队头/队尾高效地插入/删除元素,也支持随机访问。以下是定义一个deque并初始化的样例代码:
#include <deque>
using namespace std;
deque<int> myDeque = {1, 2, 3, 4};
map是一种关联式容器,以key-value的形式存储数据,支持根据key高效地查找value。以下是定义一个map并插入数据的样例代码:
#include <map>
using namespace std;
map<int, string> myMap;
myMap[1] = "Apple";
myMap[2] = "Banana";
set是一种关联式容器,存储唯一值的集合,支持快速地插入/删除元素,并且支持基于值的算法操作。以下是定义一个set并插入元素的样例代码:
#include <set>
using namespace std;
set<string> mySet;
mySet.insert("Apple");
mySet.insert("Banana");
C++ STL中提供了很多通用的算法,它们可以作用于各种容器之上。以下是一些常用的算法:
sort是一种排序算法,可以对大多数容器中的元素排序。以下是对vector容器中的元素进行升序排序的样例代码:
#include <algorithm>
using namespace std;
vector<int> myVector = {4, 1, 3, 2};
sort(myVector.begin(), myVector.end());
find是一种查找算法,可以在容器中查找指定的元素。以下是在vector容器中查找元素2的样例代码:
#include <algorithm>
using namespace std;
vector<int> myVector = {1, 2, 3, 4};
auto it = find(myVector.begin(), myVector.end(), 2);
if(it != myVector.end()) {
cout << "Found" << endl;
} else {
cout << "Not found" << endl;
}
accumulate是一种累加算法,可以将容器中的元素进行累加。以下是对vector容器中的元素进行累加的样例代码:
#include <numeric>
using namespace std;
vector<int> myVector = {1, 2, 3, 4};
int result = accumulate(myVector.begin(), myVector.end(), 0);
cout << result << endl; // 输出10
迭代器是C++ STL中的一种重要概念,它可以提供容器中元素的访问方式。以下是一些常用的迭代器:
begin和end是容器的迭代器,分别指向容器中第一个元素和最后一个元素的下一个位置。以下是使用begin/end迭代器遍历vector容器中的元素的样例代码:
#include <vector>
using namespace std;
vector<int> myVector = {1, 2, 3, 4};
for(auto it = myVector.begin(); it != myVector.end(); it++) {
cout << *it << endl;
}
back_inserter是一种迭代器适配器,可以将元素插入到容器的尾部。以下是使用back_inserter迭代器往vector容器中插入元素的样例代码:
#include <vector>
#include <iterator>
using namespace std;
vector<int> myVector = {1, 2, 3, 4};
back_inserter(myVector) = 5;
函数对象是C++ STL中的一种重要概念,它可以被用来作为算法的参数。以下是一些常用的函数对象:
greater是一种函数对象,可以被用来比较两个值,返回值为bool类型。以下是使用greater函数对象进行降序排序的样例代码:
#include <algorithm>
#include <functional>
using namespace std;
vector<int> myVector = {4, 1, 3, 2};
sort(myVector.begin(), myVector.end(), greater<int>());
equal_to是一种函数对象,可以被用来判断两个值是否相等,返回值为bool类型。以下是使用equal_to函数对象查找vector容器中是否存在元素2的样例代码:
#include <algorithm>
#include <functional>
using namespace std;
vector<int> myVector = {1, 2, 3, 4};
auto it = find_if(myVector.begin(), myVector.end(), bind(equal_to<int>(), placeholders::_1, 2));
if(it != myVector.end()) {
cout << "Found" << endl;
} else {
cout << "Not found" << endl;
}
C++ STL是C++编程中非常重要的一部分,本文介绍了其中一些常用的库。但是本篇文章只是浅尝辄止,读者可以自行学习更多C++ STL库的使用。