用C++编程,肯定会用到STL库,因为我们不希望重复的造轮子.本篇博客主要梳理一下STL中的容器以及个人的小小见解.
vector
毋庸置疑,vector是使用最频繁的STL容器.其实它相当于是数组.只是这个数组可以不同时装不同类型的数据和对象.
1 2 3 4
| vector<int> vec={1,2,3}; for(int i=0;i<vec.size();++i) cout<<vec[i]<<endl;
|
不过,单单将其想为数组,人家还有类似堆栈的操作
1 2
| vec.push_back(4); vec.pop_back();
|
list
在STL中,list表示的是双端链表.自然需要链表这种数据结构是就该用它.
1 2 3 4 5 6 7
| cout<<mylist.front()<<endl; cout<<mylist.back()<<endl; list<int>::iterator it=mylist.begin(); it++; mylist.insert(it,4);
|
deque
其实看到这个名字就大概猜测到是双端队列.注意队列有FIFO特性.
1 2 3 4 5 6 7
| deque<int> q={1,2,3}; q.pop_front(); q.pop_back(); for(auto i:q) cout<<i<<endl;
|
set
这个家伙代表的是集合,自然会联想到数学中的集合.没错这哥们通过调用算法,有并集,补集等集合运算的功能.注意这家伙是关联式容器,不能有重复元素,有序.
1 2 3 4 5 6 7 8 9 10 11 12
| set<int> myset1={1,2,5,4}; set<int> myset2={3,4,6}; vector<int> vec(10); vector<int>::iterator it; it=set_union(myset1.begin(),myset1.end(),myset2.begin(),myset2.end(),vec.begin()); vec.resize(it-vec.begin()); set<int> myset3(vec.begin(),vec.end()); for(auto i:myset3) cout<<" "<<i; cout<<endl;
|
map
我们可以把它当做映射,即key-value形式.它也是关联式容器,key值唯一,有序.
1 2 3 4 5 6 7 8 9 10 11 12
| map<int, string> m = { std::make_pair(0, "zero"), std::make_pair(1, "one"), std::make_pair(2, "two") }; int key = 0; for (auto &i : m) { if (i.second == "two") { key = i.first; break; } } cout << key << endl;
|
pair
它叫做对,于map最大的区别就是它只能表示一对元素.它通常在如下两个应用场景使用:
1.map中捆绑一对元素.
2.当函数有两个返回值时.