一个是父窗口 一个子窗口(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)
交换两个容器内容