📅  最后修改于: 2023-12-03 15:00:03.117000             🧑  作者: Mango
在 C++ 中,STL 是一个非常重要的库,它包含了许多实用的容器和算法,可以帮助我们更高效地编写代码。本篇文章将介绍 C++ 中常用的 STL 库,包括容器、迭代器、算法等。
在 C++ 中,STL 容器是指一类用于存储对象的类模板。STL 容器分为以下几种:
vector 是一种动态数组,能够快速地在尾部添加元素,也可以在中间插入或者删除元素。下面是一个例子:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.insert(v.begin(), 2);
v.insert(v.end(), 3);
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
v.erase(v.begin());
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
return 0;
}
list 是一种双向链表,可以在任何地方快速地插入或者删除元素。下面是一个例子:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l;
l.push_back(1);
l.push_front(2);
l.push_back(3);
for (list<int>::iterator it = l.begin(); it != l.end(); it++)
cout << *it << " ";
cout << endl;
l.erase(l.begin());
for (list<int>::iterator it = l.begin(); it != l.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
deque 是一种双端队列,能够快速地在两端添加或者删除元素。下面是一个例子:
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> d;
d.push_back(1);
d.push_front(2);
d.push_back(3);
for (int i = 0; i < d.size(); i++)
cout << d[i] << " ";
cout << endl;
d.pop_front();
for (int i = 0; i < d.size(); i++)
cout << d[i] << " ";
cout << endl;
return 0;
}
stack 是一种后进先出的容器,只能在顶部添加或者删除元素。下面是一个例子:
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
while (!s.empty())
{
cout << s.top() << " ";
s.pop();
}
cout << endl;
return 0;
}
queue 是一种先进先出的容器,只能在队尾添加元素,在队头删除元素。下面是一个例子:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
while (!q.empty())
{
cout << q.front() << " ";
q.pop();
}
cout << endl;
return 0;
}
priority_queue 是一种优先队列,能够自动将元素按照一定的优先级排序。下面是一个例子:
#include <iostream>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> pq;
pq.push(1);
pq.push(3);
pq.push(2);
while (!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
}
cout << endl;
return 0;
}
在 C++ 中,迭代器是指一种访问 STL 容器中元素的方法,类似于指针。STL 迭代器分为以下几种:
iterator 是最常见的迭代器类型,可以对容器进行读写操作。
const_iterator 是只读的迭代器类型,只能对容器进行读操作。
reverse_iterator 是逆向迭代器类型,可以从后往前访问容器中的元素。
const_reverse_iterator 是只读的逆向迭代器类型,只能从后往前读取容器中的元素。
下面是一个使用迭代器访问 vector 中元素的例子:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
在 C++ 中,STL 算法是指一类用于对容器中元素进行处理的函数。常见的 STL 算法包括以下几种:
sort 算法用于对容器中的元素进行排序。下面是一个例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
v.push_back(2);
v.push_back(1);
v.push_back(3);
sort(v.begin(), v.end());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
find 算法用于在容器中查找指定的元素。下面是一个例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vector<int>::iterator it = find(v.begin(), v.end(), 2);
if (it != v.end())
cout << "Found" << endl;
else
cout << "Not Found" << endl;
return 0;
}
accumulate 算法用于对容器中的元素进行累加。下面是一个例子:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
int sum = accumulate(v.begin(), v.end(), 0);
cout << sum << endl;
return 0;
}
for_each 算法用于对容器中的每个元素进行操作。下面是一个例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void square(int &x)
{
x = x * x;
}
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for_each(v.begin(), v.end(), square);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
本文介绍了 C++ 中常用的 STL 容器、迭代器和算法,希望对大家有所帮助。在实际编程中,STL 可以帮助我们更高效地编写代码,提高编程效率。