C++,STL容器

// STL容器.cpp //
#include <iostream>
#include<vector>
#include<deque>
#include<queue>
#include<map>
#include <stack>
#include<unordered_map>
#include<set>
#include<unordered_set>
#include<forward_list>
#include<string>
using namespace std;
template <class T>
void print(T &nums) {
    for (auto tmp : nums) {
        cout << tmp << " ";
    }
    cout << "" << endl;
}
 int f[5];//数组定义在函数全局,初值为0
bool cmp(int a, int b) {
     return a > b;
 }
int main()
{   
    int ff[5];  //数组定义在函数内部,初值未知
    //vector
    vector<int> v1(5); //长度为5的vector,初值为0
    vector<int> v2(5, 1); //长度为5的vector,初值为1
    vector<int> vec = { 5,4,8,2,3,1 };
    vec.push_back(9); //尾部加入
    vec.pop_back();  //尾部删除
    v2.capacity();  //vector大小
    v2.size();      //vector大小
    v2.resize(8);   //重置vector大小,若大于则添加0,小于则删除后面的值
    cout << "索引"<<vec[5] << endl; //支持索引随机存取,越界会退出
    cout << "at" << vec.at(5) << endl;  //同上,越界会抛出异常
    sort(vec.begin(), vec.end()); 
    print(vec);  //1 2 3 4 5 8
    sort(vec.begin(), vec.end(),cmp);//默认从小到大,支持自定义比较函数。
    print(vec); //8 5 4 3 2 1
    //删除
    v2.clear(); //清除所有元素
    //vec.erase(vec.begin()+1);//删除括号内迭代器指定的元素。
    //vec.erase(vec.begin() + 1, vec.begin() + 2);//删除括号内两迭代器之间的元素。
    //查找
    vector<int>::iterator it = find(vec.begin(), vec.end(),5);//返回第一个同值元素的迭代器
    if (find(vec.begin(),vec.end(),8)!=vec.end()) cout<<"vector find"<<endl;
    int index = &*it - &vec[0];
    cout << "index"<<index << endl; 
    //翻转
    reverse(vec.begin(),vec.end()); 
    //双端队列
    deque<int> dq ;   
    dq.push_back(3); //尾插
    dq.push_back(2); //尾插
    dq.push_back(7); //尾插
    cout << "dq back"<<dq.back() << endl;  //取队尾元素
    cout << "dq front"<<dq.front() << endl; //取队头元素
    dq.pop_back();  //尾删
    dq.push_front(3);  //头插
    dq.pop_front();  //头删
    dq.empty();//判空
    //队列
    queue<int> que ;
    que.push(7);
    que.push(6);
    que.pop();
    cout << "que" << que.front() << endl;

    //set ,multiset(底层用红黑树),map,multimap
    //set不可重复
    //初始化,插入
    set<int> ts = {1,5,7,8,9,44,12,34,23,21,33,45};
    if (ts.find(5) != ts.end()) cout << "find" << endl;//查找元素使得否在set中.
    vector<int> vx = { 1,1,2,2,3,3,4,5,6,7 };
    set<int> sset(vx.begin(), vx.end());
    auto ret = sset.insert(13); //会返回一个pair类型,first是插入元素的迭代器,second是否插入成功
    if (ret.second) cout << "insert retrun"<<*ret.first;
    sset.insert(vx.begin(), vx.end());  
    cout << sset.size() << endl; //输出7
    ts.upper_bound(9);//返回第一个不大于9的迭代器
    ts.lower_bound(9);//返回第一个不小于9 的迭代器
    //删除
    int cnt = ts.erase(45); cout << "cnt" << cnt << endl; //删除元素值,返回删除的个数
    auto cntx = ts.erase(ts.find(8)); cout << "cntx" << *cntx << endl; //删除元素值的下一个元素的迭代器,
    auto cntxy = ts.erase(ts.find(8), ts.find(33)); cout << "cntxy" << *cntxy << endl; //删除两个迭代器之间的值,返回后面的迭代器
    //multiset可重复
    multiset<int> mset(vx.begin(), vx.end());
    cout << mset.size() << endl;//输出10
    mset.count(1);//返回等于1的个数,对于set,返回结果只能0或者1;
    //pair类型
    pair<int, string> px(1,"xz");
    pair<vector<int>, string> p(vx, "xz");
    px.first; px.second;   //分别访问pair的两个元素。

    //map存储(key,value),用key给红黑树比较。
    map<int, string> mmap = { {1,"xx"},{2,"zz"},{3,"tt"},{4,"yy"},{5,"hh"} };
    mmap[6] = "xz";
    cout << mmap[6]<<endl;//支持索引访问,和赋值
    cout << mmap.at(6) << endl;;//支持索引访问,和赋值
    if (mmap.find(6) != mmap.end()) cout << "mapfind"<<mmap[6] << endl;//查找元素使得否在map中.
}

猜你喜欢

转载自blog.csdn.net/qq_42232193/article/details/107030422