【STL list】【数据库连接池背景】理解list使用

数据库连接池

在数据库链接池的初始化的过程中,call Init(url,user,password,port,maxCount…)
其中使用list来组织代码,list本身是双向链表容器

  • begin 获取第一个元素的双向迭代器
  • end 获取最后一个元素的下一个位置的双向迭代器
  • rbegin
  • rend
  • cbegin 不能用于修改元素
  • cend
  • empty 判断容器是否为空,返回 true or false
  • size 容器当前包含元素的个数
  • max_size 容器最大容量 (windows x86 value = 357913941 3亿多)
  • front 容器第一个元素的引用
  • back 容器最后一个元素的引用
  • assign 替换原有内容
  • emplace_front 头插一个新元素(同push_front)听说效率更高 empalce 翻译成【放置】(无法放置的灵魂)
  • emplace_back 尾插一个新元素(同push_back)听说效率更高
  • pop_front 从头部删除一个 并没有返回值 和front一起使用 容器为空会报错(win32 会弹窗)
  • pop_back 从尾部删除一个 并没有返回值 和back一起使用 (容器为空 同上)
  • emplace 插入
  • clear 清空容器,删除所有元素
  • resize 针对 size 的修改
  • remove(value) 删除容器中的值为value元素
  • push_back
  • push_front
  • rbegin
  • rend
  • insert
  • splice
  • erase
  • swap() 交换两个容器中的元素,必须保证这两个容器中存储的元素类型是相同的。
  • remove_if() 删除容器中满足条件的元素。
  • unique() 删除容器中相邻的重复元素,只保留一个。
  • merge() 合并两个事先已排好序的 list 容器,并且合并之后的 list 容器依然是有序的。
  • sort() 通过更改容器中元素的位置,将它们进行排序。
  • reverse() 反转容器中元素的顺序。
  • BidirectionalIterator 双向迭代器
    int Size = 10;
    for (int i = 0;i < Size;i++) {
        int* pvalue = new int(i);
        valuePool.push_back(pvalue);
    }

其中的push_back-尾插向后增长。

 list<int*>::iterator it = valuePool.begin();
    for (;it != valuePool.end();it++)
        printf("%d ", **it);
 0 1 2 3 4 5 6 7 8 9 

针对valuePool的遍历

    int Size = 10;
    for (int i = 0;i < Size;i++) {
   
        int* pvalue = new int(i);
        valuePool.push_front(pvalue);
    }
9 8 7 6 5 4 3 2 1 0

其中的push_front-尾插向前增长。

 int Size = 10;
    for (int i = 0;i < Size;i++) {
    
        int* pvalue = new int(i);

        valuePool.push_front(pvalue);
    }
9 8 7 6 5 4 3 2 1 0
    auto i = valuePool.rbegin(); 
i = 0
i-- (windows会报错,linux目前不清楚)
i++;(1)
i++;(2)

反向迭代器-rbegin指向最后一个(反的开始就是最后) ,++是从右到左,–是从左向右

    auto j = valuePool.rend(); 
    //j++;  //error
    j--; (9)
    j--; (8)

反向迭代器-rend() 指向第一个的前一个位置++是从右到左,–是从左向右

  list<int*>::iterator it_mov = valuePool.begin();
  9 8 7 6 5 4 3 2 1 0
  ++ it_mov;
  it_mov -> 8
  auto insert_it = valuePool.insert(it_mov,new int(100));
  9 100 8 7 6 5 4 3 2 1 0
  insert_it -> 100

insert() 操作迭代器不会失效,前插数据,有返回迭代器

 	list<int*> valueRight;
    valueRight.push_back(new int(-1));
    valueRight.push_back(new int(-2));
    valueRight.push_back(new int(-3));
    
    list<int*>::const_iterator cit = valuePool.cend();  //不能对它解引用
    若 valuePool.splice(valuePool.cend(),valueRight);
	9 8 7 6 5 4 3 2 1 0 {-1 -2 -3}
	若 valuePool.splice(--valuePool.cend(),valueRight);
	9 8 7 6 5 4 3 2 1 {-1 -2 -3} 0
	若 valuePool.splice(valuePool.cbegin(),valueRight);
	-1 -2 -3 9 8 7 6 5 4 3 2 1 0

splice()操作合并操作,迭代器指向元素则,前插迭代器指向end(),前插+end();

	list<int*>::iterator it_mov = valuePool.begin();
    ++ it_mov;
    it_mov->8
    auto nullit = valuePool.erase(it_mov);
    nullit->8   it_mov->???

erase() 操作 删除一个迭代器指向的元素,it_mov便失效

 valuePool.assign(5, new int(-1));
 -1 -1 -1 -1 -1
   valuePool.assign(valueRight.begin(), valueRight.end());
   -1 -2 -3

assign 将容器中替换原有内容

 valuePool.emplace(valuePool.end(),new int(100));

emplace在指定位置插入。

std::list是双向迭代器BidirectionalIterator双向迭代器不只支持+, -操作只支持**++**, **–**操作

可以大致看一遍,掌握好“大致”的程度。了解自己,不能自己欺骗自己。常用的基本够用了,一些不常用的,需要的时候重点学习一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值