c++ stl库学习

//c++ stl库学习
//http://c.biancheng.net/stl/
//vector向量
#include <iostream>
#include "vector"
#include "list"
#include "map"
#include "set"
#include "stack"
using namespace std;

void learnVector(){
    //vector是动态数组,擅长在尾部插入或删除元素O(1).在容器头部或者中部插入或删除元素O(n)
    //Vector<T>
    vector<int> values;//此时values为空,因为没有分配内存给它
    vector<int> primes {2,3,5,7};//初始值
    vector<int> v(20); //初始20个0
    primes.push_back(1);
    primes.pop_back();
    primes.insert(primes.begin(),4);//在指定的位置插入一个或多个元素。
    int a = primes.at(3);//会检查是否越界
    primes.capacity();//返回当前容量
    primes.empty();
    primes.front();//返回第一个元素的引用
    primes.assign(primes.front(),4);//替换元素
    swap(values,primes);//更换容器元素
    //vector 容器可以向普通数组那样访问存储的元素,甚至对指定下标处的元素进行修改
    cout << values[0] << endl;
    primes.clear();
}

void learnList(){
    //list 双向链表容器 可以在序列已知的任何位置快速插入或删除元素(时间复杂度为O(1))
    //不支持容器对象名[6]这种语法格式
    list<int> values;//空list
    list<int> values1(10); //包含10个元素初值为0
    list<int> values2(10,5);//包含10个元素初值为5
    list<int> values3(values); // copy另一个容器
    values.sort();
    values.reverse();//反转
    values.unique();//删除相邻相同的
    values.pop_back();
    values.pop_front();
    values.push_back(1);
    values.push_front(1);
    values.remove(1);//删除值为1的结点
    auto del = values.begin();
    //迭代器右移,指向第一个元素
    ++del;
    values.erase(del);//删除迭代器指向的那个元素
    //values.remove_if(); 传入lamada表达式
    //values.splice(values.front(),values1);
}

void learnMap(){
    //关联式容器,各个键值对的键和值可以是任意数据类型,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。一般做升序排序
    map<string ,int> myMap;//空map
    map<string ,int> myMap1{{"1",1},{"2",2}};
    map<string, int> newMap(myMap) ;//copy
    myMap1["1"];//重载了[]
    myMap.at("1");
    myMap.insert({"1", 2});
    myMap.count("1");//查找键为 key 的键值对的个数并返回。注意,由于 map 容器中各键值对的键的值是唯一的,因此该函数的返回值最大为 1
}

void learnSet(){
    //用户是无法做到修改 set 容器中元素的值的.和map一样,升序排列
    set<int> myset{1,2,3,4};
    myset.insert(3);
}

void learnStack(){
    //底层使用deque
    stack<int> myStack;

    //用list容器初始化stack
    std::list<int> values {1, 2, 3};
    std::stack<int,std::list<int>> my_stack (values);
}

void learnQueue(){

}

void learnDeque(){
    //双端队列容器,和 vector 不同的是,deque 还擅长在序列头部添加或删除元素,所耗费的时间复杂度也为常数阶O(1)
    //当需要向序列两端频繁的添加或删除元素时,应首选 deque 容器。
}
int main(){
    

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值