C++ STL容器和算法:详解和实例演示
C++ STL
(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。
容器
vector
vector
是一个动态数组,可以在运行时调整大小。它的优点在于可以快速地访问元素,缺点是在插入和删除元素时需要移动后面的元素。
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
v.pop_back();
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
return 0;
}
除了 push_back
和 pop_back
,vector
还提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用 v.front()
和 v.back()
分别访问首元素和尾元素,使用 v.insert()
和 v.erase()
在任意位置插入和删除元素。此外,vector
还提供了 v.empty()
和 v.size()
分别判断容器是否为空和获取容器大小。
list
list
是一个双向链表,可以在任意位置插入和删除元素,但访问元素比较慢。
#include <list>
#include <iostream>
using namespace std;
int main() {
list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
l.pop_back();
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
return 0;
}
和 vector
一样,list
也提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用 l.front()
和 l.back()
分别访问首元素和尾元素,使用 l.insert()
和 l.erase()
在任意位置插入和删除元素。此外,list
还提供了 l.empty()
和 l.size()
分别判断容器是否为空和获取容器大小。
map
map
是一个键值对容器,可以快速地根据键值查找对应的值。
#include <map>
#include <iostream>
using namespace std;
int main() {
map<string, int> m;
m["a"] = 1;
m["b"] = 2;
m["c"] = 3;
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << it->first << ":" << it->second << " ";
}
cout << endl;
m.erase("b");
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << it->first << ":" << it->second << " ";
}
cout << endl;
return 0;
}
和 vector
、list
一样,map
也提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用 m.find()
查找元素,使用 m.insert()
插入元素,使用 m.erase()
删除元素。此外,map
还提供了 m.empty()
和 m.size()
分别判断容器是否为空和获取容器大小。
算法
除了容器,STL还提供了一些常用的算法,可以方便地操作容器中的元素。
sort
sort
是一个排序算法,可以快速地将数组或容器中的元素按照指定规则排序。
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v;
v.push_back(3);
v.push_back(2);
v.push_back(1);
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
return 0;
}
sort
的第一个参数是要排序的容器的起始地址,第二个参数是要排序的容器的结束地址。这里使用了 vector
的 begin()
和 end()
函数获取迭代器,也可以使用数组名和数组长度作为参数。
sort
默认是升序排序,可以通过第三个参数指定排序规则。比如,可以使用 greater<int>()
降序排序,使用 less<int>()
升序排序。
find
find
是一个查找算法,可以快速地在数组或容器中查找指定元素。
#include <algorithm>
#include <vector>
#include <iostream>
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 " << *it << endl;
} else {
cout << "not found" << endl;
}
return 0;
}
find
的第一个参数是要查找的容器的起始地址,第二个参数是要查找的容器的结束地址,第三个参数是要查找的元素。find
返回一个迭代器,指向第一个等于要查找元素的位置,如果没有找到则返回容器的结束地址。
除了 find
,STL 还提供了很多其他的查找算法,比如 find_if
可以根据指定规则查找元素,binary_search
可以判断容器中是否含有指定元素,lower_bound
和 upper_bound
可以查找元素的下界和上界。
结论
本文介绍了 C++ STL 中的一些常用容器和算法,它们可以大大提高开发效率,开发者应该熟练掌握它们的使用。除了本文介绍的容器和算法,STL 还提供了很多其他的容器和算法,可以根据具体的需求选择使用。在使用 STL 时,要注意容器和算法的复杂度,避免出现性能问题。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!