STL相关知识

C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map等

vectore

一个vector类似于一个动态的一维数组,vector中可以存在重复的元素!

声明

(1) vector a; // 声明一个元素为int类型的vector a
(2) vectot a; // 声明一个元素为MyType类型的vector a
a包含0个元素,即a.size()的值为0,但它是动态的,其大小会随着数据的插入和删除改变而改变。
(3) vector a(100, 0); // 这里声明的是一个已经存放了100个0的整数vector

遍历

(1) for(vector::iterator it=a.begin(); it!=a.end(); it++)
cout<<*it<<endl;
(2). for(int i = 0; i < a.size(); i++)
cout<<a[i]<<endl;

其他操作

a.size(); 返回vector的大小,即包含的元素个数
a.pop_back(); 删除vector末尾的元素,vector大小相应减一
a.push_back(); 用于在vector的末尾添加元素
a.back(); 返回vector末尾的元素
a.clear(); 将vector清空,vector大小变为0
a.at() 得到编号位置的数据
a.begin() 得到数组头的指针
a.end() 得到数组的最后一个单元+1的指针
a.front() 得到数组头的引用
a.back() 得到数组的最后一个单元的引用
a. max_size() 得到vector最大可以是多大
a.capacity() 当前vector分配的大小
a.size() 当前使用数据的大小
a.resize() 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
a.reserve() 改变当前vecotr所分配空间的大小
a.erase() 删除指针指向的数据项
a.clear() 清空当前的vector
a.rbegin() 将vector反转后的开始指针返回(其实就是原来的end-1)
a.rend() 将vector反转构的结束指针返回(其实就是原来的begin-1)
a.empty() 判断vector是否为空
a.swap() 与另一个vector交换数据

map

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。

声明

1
map<int, string> mp;

数据插入

在构造map容器后,我们就可以往里面插入数据了。这里讲三种插入数据的方法:
第一种:用insert函数插入pair数据

1
2
map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1,“student_one”));

第二种:用insert函数插入value_type数据

1
2
3
map<int, string> mapStudent;
mapStudent.insert(map<int, string>::value_type (1,"student_one"));
mapStudent.insert(make_pair(1, "student_one"));

第三种:用数组方式插入数据

1
2
3
map<int, string> mapStudent;
mapStudent[1] = “student_one”;
mapStudent[2] = “student_two”;

遍历

第一种:应用前向迭代器

1
2
3
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout<<iter->first<<" "<<iter->second<<end;

第二种:应用反向迭代器

1
2
3
map<int, string>::reverse_iterator iter;
for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)
cout<<iter->first<<" "<<iter->second<<end;

第三种:用数组方式

1
2
3
int nsize = mapStudent.size()
for(int nIndex = 1; nIndex <= nSize; nIndex++)
cout<<mapStudent[nIndex]<<end;

/////

1
2
for(it=m.begin();it!=m.end();++it)
cout<<"key: "<<it->first <<" value: "<<it->second<<endl;

set

set是集合,set中不会包含重复的元素,这是和vector的区别。

遍历

1
2
3
4
5
6
7

set<int>ss;
set<int>::iterator it;
for(it = ss.begin(); it != ss.end(); it++)
{
printf("%d ",*it);
}

基本操作

  1. begin() 返回指向第一个元素的迭代器
  2. clear() 清除所有元素
  3. count() 返回某个值元素的个数
  4. empty() 如果集合为空,返回true
  5. end() 返回指向最后一个元素的迭代器
  6. equal_range() 返回集合中与给定值相等的上下限的两个迭代器
  7. erase() 删除集合中的元素
  8. find() 返回一个指向被查找到元素的迭代器
  9. get_allocator() 返回集合的分配器
  10. insert() 在集合中插入元素
  11. lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
  12. key_comp() 返回一个用于元素间值比较的函数
  13. max_size() 返回集合能容纳的元素的最大限值
  14. rbegin() 返回指向集合中最后一个元素的反向迭代器
  15. rend() 返回指向集合中第一个元素的反向迭代器
  16. size() 集合中元素的数目
  17. swap() 交换两个集合变量
  18. upper_bound() 返回大于某个值元素的迭代器
  19. value_comp() 返回一个用于比较元素间的值的函数
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • © 2020 Super Monkey
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信