【STL vector】【AtoWBridge】使用 用法

一个是父窗口 一个子窗口(SDL视频窗口)
内部开了一个进程,一直有一个循环去处理事件?我也看不太懂,需要深入研究。

	std::vector<std::shared_ptr<CAtoWChild>> m_childList;
	
	for (int index = 0; index < m_childList.size(); index++)
	{
		if (m_childList[index]->m_parentWindow == handle || m_childList[index]->m_SDLWindow == handle)
		{
			child = m_childList[index];
			break;
		}
	}

定义是这样的?用法是什么怎么用的?这么用可以解决什么样的问题

  • push_back 没有push_front
  • pop_back 尾删
  • [index] 重载
  • at 功能同上
  • capacity 容量
    vector底层会malloc一块内存用来存储元素,这一块内存能存储元素的上限就是容量,突破容量值,会给vector重新分配一块内存。具体策略要看这部分的底层内存分配算法
  • size 元素个数
    capacity大于等于size 这样做的好处是,可以很大程度上减少 vector 申请空间的次数,当后续再添加元素时,就可以节省申请空间耗费的时间。
  • data 获取元素对应的指针,可以通过偏移得到别的元素
  • reserve 扩充容量 capacity
  • shrink_to_fit 缩小size和capacity的匹配 不怎么用但是要知道
  • swap 交换连个容器的内容
    int Size = 10;
    for (int i = 0;i < Size;i++) {
    
        int* pvalue = new int(i);

        valuePool.push_back(pvalue);
    }

push_back

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

        valuePool.push_back(pvalue);
    }
    int *p = valuePool.at(1);
    size_t size = valuePool.capacity();
    13
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));

    size = valuePool.capacity();
	19
	valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    
	size = valuePool.capacity();
	28
	valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
    valuePool.push_back(new int(10));
	
	size = valuePool.capacity();
	42

3 6 9 14

capacity 就是后一次增加比前一次增加稍微多一点点,又不多很多。

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

        valuePool.push_back(pvalue);
    }
    int* int_p = valuePool.back();
    valuePool.pop_back();

   vector<int*>::iterator it = valuePool.insert((++valuePool.begin()), new int(100));
	0 100 1 2 3 4 ...	
    vector<int*>::iterator it_mov = valuePool.begin();
	it -> 100

insert 插入都是往前插,如果要是插入相对于元素的后面,那么在第一元素前插入该怎么办呢?

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

        valuePool.push_back(pvalue);
    }
    vector<int*>::iterator it = valuePool.begin();
   auto del_it =  valuePool.erase(it);
   //it++; 
   it -> 迭代器失效
   del_it++;
   del_it++;
   del_it++;
   del_it++;
   del_it -> 迭代器
vector<int*>valuePool;
0 1 2 3 4 5 6 7 8 9
vector<int*>value;
10 11 12 13 14 15 16 17
valuePool.swap(value)
交换两个容器内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值