容器array
array是固定大小的顺序容器,类似于一般的数组。它存储在连续的内存,并且大小不可以改变,即允许修改元素的值,但是不能插入和删除元素。
array的初始化和成员函数
其他与array有关的类、函数和操作
array支持关系操作符==,!=,<,<=,>,>=。
//1.tuple_element类 获取array中第几个元素的值
//具体用法
int main(){
array<int, 5 > a = { 1,2,3,4 };
tuple_element<0, array<int, 5>>::type inval= a.front();
cout << inval << endl;
return 0;
}
//2.tuple_size类 获取array数组的大小
int main()
{
array<int, 5 > a = { 1,2,3,4,5 };
cout << tuple_size<array<int, 5>>::value << endl;
system("pause");
return 0;
}
//3.get函数 返回array[id]的值
int main()
{
array<int, 5 > a = { 10,11,12,13 };
cout << std::get<1>(a) << endl;
return 0;
}
deque容器
deque是双端队列,可以向两端发展,因此在头尾两端添加和删除元素都十分迅速。同时它也支持随机访问任一元素。
deque是由若干连续空间串接而成,deque的最大任务,就是在这些分段连续的空间上维护其整体连续的假象,并提供随机存取的接口。它的原理详见下面的连接deque内部实现原理,我们从下面的程序也可以看出这一点。
deque<int> deq;
for (int i = 0;i < 10;i++){
deq.push_back(10); //在deq的尾部添加
deq.push_front(1); //在deq的头部添加
}
for (int i = 0;i < 20;i++) {
cout << deq.at(i) << " ";
cout << &deq[i] << endl;
}
system("pause");
return 0;
这里可以看出deque是一些独立的区块组成的,当我们用at或[]来输出时,给人感觉上是连续的。deque在一个映射结构中保存这些块以及顺序的跟踪。
deque的初始化和成员函数
deque的迭代器失效
- 在deque容器首部或者尾部插入元素不会使得任何迭代器失效。
- .在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。
- 在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。
deque的特点
- 随机访问,在头尾两端插入和删除方便。但是占用内存多,主要是由于deque要处理内存块的跳转,需要保留空间。
- 迭代器需要在不同区块间跳转,所以必须是特殊的智能型指针,非一般指针。
- 任何插入或删除动作都会使所有指向deque元素的指针、引用和迭代器失效,唯一例外的是在头部或尾部插入元素(此时指针和引用仍然有效,但迭代器失效)。
- deque的内存区块不再被使用时,会被释放。deque的内存大小是可缩减的。