C++ STL 个人使用总结
2022/2/5 20:12:29
本文主要是介绍C++ STL 个人使用总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. vector
vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。
vector 为变长数组,体现倍增思想,储存在#include
vector 擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1)
;而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)
- size( ):返回容器内元素的个数
- empty( ):返回容器是否为空,若容器内为空,则返回true;若容器内不为空,即存在元素,则返回false
- clear( ):清空容器内的所有元素
- begin( ):返回指向容器中第一个元素的迭代器
- end( ):返回指向容器最后一个元素所在位置后一个位置的迭代器
- rbegin( ):返回指向最后一个元素的迭代器
- rend( ):返回指向第一个元素所在位置前一个位置的迭代器
- back( ):返回最后一个元素的值
- push_back( ):在序列的尾部添加一个元素
- pop_back( ):在序列的尾部删除一个元素
- insert( ):在指定的位置插入一个或多个元素 (这里的位置指的是某个位置的迭代器,如 a.begin()+2 等 )
- erase( ):移出一个元素或一段元素 (一段元素的区域为左闭右开,且位置同样为迭代器)
可以创建一个vector容器:vector<int> name/vector<double> name
, <>中标出vector容器的类型
可以在创建的同时指定初始值以及元素个数:vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19};
也可以指定元素个数:vector<double> values(20);
,且这二十个元素初始值均为0
注意:圆括号 ( ) 和大括号 { } 是有区别的,前者(例如(20)表示元素的个数,而后者(例如{20})则表示 vector 容器中只有一个元素 20
也可以指定其他元素做初始值:vector<double> values(20, 1.0);
,这20个元素初始值均为1.0
值得一提的是,圆括号 ( ) 中的 2 个参数,既可以是常量,也可以用变量来表示:
int num=20; double value =1.0; vector<double> values(num, value);
通过存储元素类型相同的其它 vector 容器,也可以创建新的 vector 容器:
vector<int>value1 = {1,2,3,4,5}; vector<int>value2(value1); // value2容器的元素和value1容器的元素相同,都是 1,2,3,4,5
在此基础上,如果不想复制其它容器中所有的元素,可以用一对指针或者迭代器来指定初始值的范围:
vector<int> a = {1,2,3,4,5}; vector<int> b(a.begin(), a.begin()+3); // b容器内的元素为 1,2,3 int c[] = {1,2,3,4,5}; vector<int> d(c, c+3); // d容器内的元素为 1,2,3
特别的,vector不能重复定义同一个容器,否则报错
通过迭代器循环vector容器的方法:
vector<char> value = {'S','T','L'}; for (vector<char>::iterator i = value.begin();i != value.end();i ++) { cout << *i << endl; }
for循环中的vector
另外,vector支持比较运算,比较方式为字典序:
vector<int> a = {3,3}; vector<int> b(4,2); // b = {2,2,2,2} if (a > b) cout << "a > b"; // 输出 a > b
2.
这篇关于C++ STL 个人使用总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享