deque的操作函数
构造函数和析构函数:
非变动性操作:
变动性操作:
deque内存
deque从逻辑上来看是连续的内存,本质上是由一段段固定大小 的连续空间组成。deque采用类似索引的结构管理内存,如下:
采用一小块连续的内存索引缓存结点,每一个缓存结点也是一段连续的空间,可以存储多个数据。当索引内存空间满载,需要申请一块更大的内存做索引。
注意:
deque不提供容量操作:capacity()和reverse()。
deque直接提供函数完成首尾元素的插入和删除。
除了at()函数,其他成员函数都不会检查索引或迭代器是否有效。
元素的插入和删除可能会导致内存重新分配。所以任何插入或删除操作都会使所有指向deque元素的pointers、reference、iterators失效。唯一 例外的是在首尾插入元素之后,pointers和reference可能仍然有效(iterators仍然会失效)。
#include <deque>
#include <iostream>
using namespace std;
void printDeque(deque<int> que)
{
deque<int>::iterator it = que.begin();
for(;it!=que.end();it++)
cout<<*it<<" ";
cout<<endl;
cout<<endl;
}
deque<int>::iterator findDeque(deque<int> que,int num)
{
deque<int>::iterator it = que.begin();
for(;it!=que.end();it++)
if(*it == num)
{
return it;
}
cout<<endl;
return it;
}
int main()
{
deque<int> deque1;
int i =1;
for(i=1;i<10;i++)
deque1.push_back(i);
printDeque(deque1);// output : 1 2 3 4 5 6 7 8 9
//deque1.find(1); /*err deque has no member named 'find'*/
deque<int>::iterator it = findDeque(deque1,5);
if(it != deque1.end())
cout<<*it<<endl;// output:5
deque<int>::iterator it2 = findDeque(deque1,8);
if(it2 != deque1.end())
cout<<*it2<<endl; //output :8
deque1.insert(deque1.begin()+5,100);
printDeque(deque1);//output: 1 2 3 4 5 100 6 7 8 9
if(it2 != deque1.end())
cout<<*it2<<endl;// output:7 *it2 is changed !
return 0;
}