美文网首页
STL array 和stack 以及set容器

STL array 和stack 以及set容器

作者: arkliu | 来源:发表于2022-12-01 08:48 被阅读0次

array

//初始化
void fun() {
    array<int,3>arr1;
    array<int,3>arr2{};

    array<int,3>arr3{1,2,3};

    array<int,3>arr4(arr3);

    array<int,6>arr5({1,2,3});

    array<int,3>arr6={arr4};

    arr1 = arr3;

    arr2.fill(123);
    get<0>(arr2) = 456;
    cout << arr2[0]<<"----"<<arr2[1]<<"----"<<arr2[2]<<endl;
}

void fun1() {
    array<int,3>arr1{1,2,3};
    array<int,3>arr2;
    array<int,3>arr3{4,5,6};
    array<int,3>arr4{1,2,3};
    cout <<(arr1 == arr4)<<endl;// 大小相同,逐值比较

    cout <<arr1.empty()<<"--"<<arr1.size()<<"---"<<arr1.max_size()<<endl;
    cout <<arr2.empty()<<"--"<<arr2.size()<<"---"<<arr2.max_size()<<endl;
    cout <<arr1.at(0) <<"---"<<get<1>(arr1) <<"---"<<arr1[2] <<endl;

    arr3.swap(arr1);
}

//迭代器
void fun2() {
    array<int,3>arr1{1,2,3};

    /**
     * begin()/end();
     * cbegin()/cend(); cbegin中的c表示const,不允许通过迭代器修改元素
     * rbegin()/rend();  逆向迭代器
     * crbegin()/crend();  
    */
    array<int,3>::iterator start;
    start = arr1.begin();

    array<int,3>::iterator end = arr1.end();
    while (start!=end)
    {
        cout <<*start<<endl;
        start++;
    }
}

stack

  • 先进后出
  • 不提供迭代器,不能遍历
  • 只能操作栈顶元素

常用api

  • size() 元素个数
  • empty() 是否为空
  • top() 返回栈顶元素,不删除,如果是空栈,会报错
  • push (val) 向栈顶追加元素
  • pop() 删除栈顶元素,出栈,如果没元素可出栈,会报错
  • emplace(val) 向栈顶追加元素,比push效率高
#include <stack>
//初始化
void fun() {
    stack<int>s1;
    s1.push(1);
    s1.push(2);
    s1.push(3);
    stack<int>s2(s1);

    stack<int>s3;
    cout <<s2.empty()<<"---"<<s2.size()<<endl;
    cout <<s3.empty()<<"---"<<s3.size()<<endl;
}

set

  • set是关联容器,其通过键值进行排序

  • set和multiset的区别是,multiset可以有重复的键值

  • 底层是红黑树
    常用api

  • size() 元素个数

  • empty() 是否为空

  • insert(elem) 插入元素

  • clear() 清空元素

  • erase(pos) 删除pos迭代器处的元素,返回下一个位置迭代器元素

  • erase(begin, end) 删除begin,end区间元素,返回下一个迭代器位置

  • erase(elem) 删除容器中值为elem元素

  • find(key) 查找key是否存在,存在就返回迭代器,不存在就返回end迭代器

  • int cout(key) 查找key的个数

  • lower_bound(elem) 返回第一个大于或等于elem的元素迭代器,不存在就返回end迭代器

  • upper_bound(elem) 返回第一个大于elem的元素迭代器,不存在就返回end迭代器

  • equal_range(elem) 返回两个大于或等于elem的元素迭代器,用对组接收,pair<set<T>::iterator,pair<set<T>::iterator>,不存在就返回end迭代器

#include <set>

//初始化
void fun() {
    set<int>s1;
    set<int>s2{1,2,3,4,5,6,7};
    set<int>s3{};
    set<int>s4(s2);
    set<int>s5={s2};

    set<int>s6;
    s6 = s5;
    s1.swap(s2); // 交换两个集合

    for(auto start = s2.begin(); start != s2.end(); start++) {
        cout <<*start<<",   ";
    }
    cout <<endl;
}

void fun2() {
    set<int>s1{3,4,2,10,1,6};
    s1.insert(5);
    for(auto start = s1.begin(); start != s1.end(); start++) {
        cout <<*start<<",   ";
    }
    cout <<endl;

    auto it = s1.find(33);
    if (it == s1.end())
    {
        cout <<"没找到。。"<<endl;
    }
}

相关文章

网友评论

      本文标题:STL array 和stack 以及set容器

      本文链接:https://www.haomeiwen.com/subject/cauzxdtx.html