C++ deque类成员函数介绍

目录

deque模板介绍:

deque特点:

deque内存结构图解:

deque各操作地址指向:

 deque的成员函数:

deque构造函数:

代码实例:

运行结果:

 deque赋值函数:

实例:

运行结果:

 deque判断函数

运行结果:

 deque的删除和插入:

代码示例:

运行结果:

 deque数据存取函数:

代码实例:

运行结果:

 结束!


deque模板介绍:

              deque是C++ STL中的一个双端队列模板,它支持在队列的两端进行元素的插入和删除操作。deque的全称是double-ended queue,即双向队列。deque的特点是可以高效地在队列的两端进行元素的插入删除操作,而且可以在任意位置进行元素的访问和修改操作。

deque特点:

1.支持迭代器:可以用迭代器随机访问容器中的元素。

2.插入和删除:可以在队头和队尾进行自由的删除和插入,但是在中间插入或删除的时候效率比较慢,这是由于deque的内存结构决定的,我们会在下文进行解释。

3.内存管理:deque使用一段连续的存储空间,但是它可以使用多个缓冲区存储元素,每一个缓冲区的大小可以不一样。

4.在C++17之前的标准中,deque是不支持元素的拷贝移动操作的,这是因为他的元素存储在不同的缓冲区中,而不是连续存储的,拷贝和移动可能会导致内存布局的变化,从而破坏deque的数据结构,C++17之后就移除了这一特性。

deque内存结构图解:

deque内部有一个中控器,维护缓冲区地址,而缓冲区存放真实数据,中控器维护的是每一个缓冲区的地址,使得使用deque时像一片连续的空间。

C++ deque类成员函数介绍_第1张图片

deque各操作地址指向:

C++ deque类成员函数介绍_第2张图片

 这也是为什么我们区间赋值永远不包含end()的原因:end()指向的是最后一个元素的后一个位置!

 deque的成员函数:

deque构造函数:

1.默认构造函数:deque deqT;

dequed1;

2.将[beg,end)区间的元素拷贝给自身:deque (beg,end);

dequed2(d1.begin(), d1.end());

3.将n个ele拷贝给自身:deque(n,elem);

dequed3(3, 8);

4.拷贝另一个容器给自身:deque(const deque &deq);

dequed4(d3);

代码实例:

#include
using namespace std;
#include

void print(deque&d)
{
	for (deque::iterator it =d.begin();it!=d.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	//默认构造
	dequed1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	cout << "默认构造:" << endl;
	print(d1);

	//区间构造
	dequed2(d1.begin(), d1.end());
	cout << "区间构造:" << endl;
	print(d2);

	//n个elem构造
	dequed3(3, 8);
	cout << "n个ele构造:" << endl;
	print(d3);

	//拷贝构造
	dequed4(d3);
	cout << "拷贝构造:" << endl;
	print(d4);

}
int main()
{
	test01();

}

运行结果:

C++ deque类成员函数介绍_第3张图片

 deque赋值函数:

1.将n个ele赋值给自身:assign(n,ele);

dequed1;
d1.assign(8, 10);

2.将[beg,end)的元素拷贝赋值给自身:assign(beg,end)

dequed2;
d2.assign(d1.begin(), d1.end());

3.重载等号运算符:deque &operator=const deque &deq

dequed3 = d1;

实例:

#include
using namespace std;
#include
void print(deque& d)
{
	for (deque::iterator it = d.begin(); it != d.end(); it++)
			{
				cout << *it << " ";
			}
			cout << endl;
}
void test01()
{
	//将n个elem元素赋值给自身
	dequed1;
	d1.assign(8, 10);
	cout << "n个elem赋值结果为:";
	print(d1);

	//将beg,end中的数据赋值给自身
	dequed2;
	d2.assign(d1.begin(), d1.end());
	cout << "区间赋值结果为:";
	print(d2);

	//重载等号运算符
	dequed3 = d1;
	cout << "重载等号赋值结果为:";
	print(d3);
}
int main()
{
 test01();
}

运行结果:

 deque判断函数

1.判断容器是否为空:empty();

2.判断容器中元素个数:size();

3重新指定容器长度为num,如果容器变长,则变长部分用默认值填充新位置,如果容器变小就删除多出元素:resize(num);

4.重新指定容器的长度为num。若容器变长,就以ele值填充新位置,若容器变短,则超出的元素被删除:resize(num,elem);

#include
using namespace std;
#include
void print(deque& d)
{
	for (deque::iterator it = d.begin(); it != d.end(); it++)
			{
				cout << *it << " ";
			}
			cout << endl;
}
void test01()
{
	//将n个elem元素赋值给自身
	dequed1;
	d1.assign(8, 10);
	print(d1);

	cout << "d1容器是否为空(1为空 0为不空):" << d1.empty()<

运行结果:

C++ deque类成员函数介绍_第4张图片

 deque的删除和插入:

两端插入
1.在尾部添加一个数据:push_back();
2.在容器头部添加一个数据:push_front();
3.删除容器中最后一个元素:pop_back();
4.删除容器中第一个数据:pop_front();

指定位置插入
1.  在pos位置插入一个ele元素,返回新数据的位置:  insert (pos,elem)
2. 在pos位置插入n个elem元素,无返回值:  insert(pos,n,elem)
3. 在pos位置插入[beg,end)区间的数据,无返回值:  insert(pos,beg,end)
4. 清空容器的所有数据:  clear() ;
5.  删除从beg到end的所有元素:  eares(beg,end);
6.删除pos位置的元素,返回下一个数据的位置:  eares pos

代码示例:

#include
using namespace std;
#include
void print(deque& d)
{
	for (deque::iterator it = d.begin(); it != d.end(); it++)
			{
				cout << *it << " ";
			}
			cout << endl;
}
void test01()
{
	dequed(2,7 );
	dequed1;
	d1.assign(8, 10);
	print(d1);


	d1.push_back(1);
	d1.push_front(2);
	cout << "插入后";
	print(d1);


	d1.pop_back();
	d1.pop_front();
	cout << "删除后";
	print(d1);


	d1.insert(d1.begin(), 8);
	print(d1);

	d1.insert(d1.begin(), 2, 9);
	print(d1);

	d1.insert(d1.begin(), d.begin(), d.end());
	print(d1);

	d1.erase(d1.begin());
	print(d1);

	d1.erase(d1.begin(), d1.end());
	print(d1);

	d.clear();
	cout << "d的元素为:";


}
int main()
{
 test01();
}

运行结果:

C++ deque类成员函数介绍_第5张图片

 deque数据存取函数:

1.获取容器中第dex+1个元素:at(int dex);
2.获取容器中第dex+1个元素:operator[dex];
3.获取容器中第一个元素:front();
4.获取容器中最后一个元素:back();

代码实例:

#include
using namespace std;
#include

void print(deque&d)
{
	for (deque::iterator it =d.begin();it!=d.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	//默认构造
	dequed1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	print(d1);

	cout << d1.at(4)<

运行结果:

C++ deque类成员函数介绍_第6张图片

 结束!

你可能感兴趣的:(c++,c++,开发语言)