C++ STL容器和算法:详解和实例演示

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测监控 Prometheus 版,每月50GB免费额度
简介: C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。

C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。

容器

vector

vector是一个动态数组,可以在运行时调整大小。它的优点在于可以快速地访问元素,缺点是在插入和删除元素时需要移动后面的元素。

#include <vector>#include <iostream>usingnamespacestd;
intmain() {
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (inti=0; i<v.size(); i++) {
cout<<v[i] <<" ";
    }
cout<<endl;
v.pop_back();
for (inti=0; i<v.size(); i++) {
cout<<v[i] <<" ";
    }
cout<<endl;
return0;
}

除了push_backpop_backvector还提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用v.front()v.back()分别访问首元素和尾元素,使用v.insert()v.erase()在任意位置插入和删除元素。此外,vector还提供了v.empty()v.size()分别判断容器是否为空和获取容器大小。

list

list是一个双向链表,可以在任意位置插入和删除元素,但访问元素比较慢。

#include <list>#include <iostream>usingnamespacestd;
intmain() {
list<int>l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
for (list<int>::iteratorit=l.begin(); it!=l.end(); it++) {
cout<<*it<<" ";
    }
cout<<endl;
l.pop_back();
for (list<int>::iteratorit=l.begin(); it!=l.end(); it++) {
cout<<*it<<" ";
    }
cout<<endl;
return0;
}

vector一样,list也提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用l.front()l.back()分别访问首元素和尾元素,使用l.insert()l.erase()在任意位置插入和删除元素。此外,list还提供了l.empty()l.size()分别判断容器是否为空和获取容器大小。

map

map是一个键值对容器,可以快速地根据键值查找对应的值。

#include <map>#include <iostream>usingnamespacestd;
intmain() {
map<string, int>m;
m["a"] =1;
m["b"] =2;
m["c"] =3;
for (map<string, int>::iteratorit=m.begin(); it!=m.end(); it++) {
cout<<it->first<<":"<<it->second<<" ";
    }
cout<<endl;
m.erase("b");
for (map<string, int>::iteratorit=m.begin(); it!=m.end(); it++) {
cout<<it->first<<":"<<it->second<<" ";
    }
cout<<endl;
return0;
}

vectorlist一样,map也提供了很多其他的成员函数和迭代器,可以方便地访问和修改元素。比如,可以使用m.find()查找元素,使用m.insert()插入元素,使用m.erase()删除元素。此外,map还提供了m.empty()m.size()分别判断容器是否为空和获取容器大小。

算法

除了容器,STL还提供了一些常用的算法,可以方便地操作容器中的元素。

sort

sort是一个排序算法,可以快速地将数组或容器中的元素按照指定规则排序。

#include <algorithm>#include <vector>#include <iostream>usingnamespacestd;
intmain() {
vector<int>v;
v.push_back(3);
v.push_back(2);
v.push_back(1);
sort(v.begin(), v.end());
for (inti=0; i<v.size(); i++) {
cout<<v[i] <<" ";
    }
cout<<endl;
return0;
}

sort的第一个参数是要排序的容器的起始地址,第二个参数是要排序的容器的结束地址。这里使用了vectorbegin()end()函数获取迭代器,也可以使用数组名和数组长度作为参数。

sort默认是升序排序,可以通过第三个参数指定排序规则。比如,可以使用greater()降序排序,使用less()升序排序。

find

find是一个查找算法,可以快速地在数组或容器中查找指定元素。

#include <algorithm>#include <vector>#include <iostream>usingnamespacestd;
intmain() {
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vector<int>::iteratorit=find(v.begin(), v.end(), 2);
if (it!=v.end()) {
cout<<"found "<<*it<<endl;
    } else {
cout<<"not found"<<endl;
    }
return0;
}

find的第一个参数是要查找的容器的起始地址,第二个参数是要查找的容器的结束地址,第三个参数是要查找的元素。find返回一个迭代器,指向第一个等于要查找元素的位置,如果没有找到则返回容器的结束地址。

除了find,STL还提供了很多其他的查找算法,比如find_if可以根据指定规则查找元素,binary_search可以判断容器中是否含有指定元素,lower_boundupper_bound可以查找元素的下界和上界。

结论

本文介绍了C++ STL中的一些常用容器和算法,它们可以大大提高开发效率,开发者应该熟练掌握它们的使用。除了本文介绍的容器和算法,STL还提供了很多其他的容器和算法,可以根据具体的需求选择使用。在使用STL时,要注意容器和算法的复杂度,避免出现性能问题。

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:

牛客知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果觉得有帮助,帮忙点个赞👍

相关文章
|
2天前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
2月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
38 0
|
3月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
741 0
高精度算法(加、减、乘、除,使用c++实现)
|
3月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
58 0
|
3月前
|
存储 算法 决策智能
【算法】博弈论(C/C++)
【算法】博弈论(C/C++)
|
3月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
3月前
|
机器学习/深度学习 人工智能 算法
【算法】最长公共子序列(C/C++)
【算法】最长公共子序列(C/C++)
|
3月前
|
人工智能 算法 BI
一篇带你速通差分算法(C/C++)
一篇带你速通差分算法(C/C++)
|
3月前
|
人工智能 算法 C++
一篇带你速通前缀和算法(C/C++)
一篇带你速通前缀和算法(C/C++)
|
3月前
|
存储 算法 C++
弗洛伊德(Floyd)算法(C/C++)
弗洛伊德(Floyd)算法(C/C++)