6.deque容器的使用

deque容器

1.构造函数

/*1.默认构造-无参构造*/
/*2.通过区间的方式进行构造*/
/*3.n个elem方式构造*/
/*4.拷贝构造*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<deque>

using namespace std;
/*1.默认构造-无参构造*/
/*2.通过区间的方式进行构造*/
/*3.n个elem方式构造*/
/*4.拷贝构造*/

void printDeque(const deque<int>&d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	/*1.默认构造-无参构造*/
	deque<int>d;

	for (int i = 0; i < 5; i++)
	{
		d.push_back(i);
	}

	printDeque(d);

	/*2.通过区间的方式进行构造*/
	deque<int>d1(d.begin(), d.end());
	printDeque(d1);

	/*3.n个elem方式构造*/
	deque<int>d2(5, 100);
	printDeque(d2);

	/*4.拷贝构造*/
	deque<int>d3(d2);
	printDeque(d3);
	
	return;
}
int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

2.赋值

/* 1.赋值  operator= */
/* 2.赋值  assign 迭代器区间*/
/* 3.赋值  assign n个elem的方式*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<deque>

using namespace std;
/* 1.赋值  operator= */
/* 2.赋值  assign 迭代器区间*/
/* 3.赋值  assign n个elem的方式*/

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	deque<int>d;

	for (int i = 0; i < 5; i++)
	{
		d.push_back(i + 1);
	}

	printDeque(d);

	/* 1.赋值  operator= */
	deque<int>d1;
	d1 = d;
	printDeque(d1);

	/* 2.赋值  assign 迭代器区间*/
	deque<int>d2;
	d2.assign(d1.begin(), d1.end());

	printDeque(d2);
	/* 3.赋值  assign n个elem的方式*/
	deque<int>d3;
	d3.assign(5, 200);

	printDeque(d3);

	return;
}


int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

3.大小操作

/*1.empty() 如果为不空,返回值是0*/
/*2.size() 查询容器中的数据个数*/
/*3.resize() 重新指定大小*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<deque>

using namespace std;
/*1.empty() 如果为不空,返回值是0*/
/*2.size() 查询容器中的数据个数*/
/*3.resize() 重新指定大小*/

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	deque<int>d;

	for (int i = 0; i < 5; i++)
	{
		d.push_back(i + 1);
	}

	printDeque(d);

	/*1.empty() 如果为不空,返回值是0*/
	if (0 != d.empty())
	{
		cout << "容器为空" << endl;
	}
	else
	{
		/*2.size() 查询容器中的数据个数*/
		cout << "容器中的元素个数:" << d.size() << endl;

		/*3.resize() 重新指定大小*/
		/*重新指定大小,如果大于元素个数,多出来的元素会被填充;不写填充值的话,默认填0*/
		d.resize(10, 50);

		printDeque(d);

		/*重新指定大小,如果小于元素个数,多余元素会被删除*/
		d.resize(2);

		printDeque(d);
	}

	return;
}


int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

4.插入和删除

/*1.尾插 - push_back*/
/*2.尾删 - pop_back*/
/*3.头插 - push_front*/
/*4.头删 - pop_front*/
/*5.插入 - insert*/
/*6.删除 - erase*/
/*7.清空 - clear*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<deque>

using namespace std;
/*1.尾插 - push_back*/
/*2.尾删 - pop_back*/
/*3.头插 - push_front*/
/*4.头删 - pop_front*/
/*5.插入 - insert*/
/*6.删除 - erase*/
/*7.清空 - clear*/
void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	deque<int>d;

	/*1.尾插 - push_back*/
	d.push_back(10);
	d.push_back(20);
	d.push_back(30);
	cout << "尾插: ";
	printDeque(d);
	/*2.尾删 - pop_back*/
	d.pop_back();
	cout << "尾删: ";
	printDeque(d);

	/*3.头插 - push_front*/
	d.push_front(100);
	d.push_front(200);
	cout << "头插: ";
	printDeque(d);

	/*4.头删 - pop_front*/
	d.pop_front();
	cout << "头删: ";
	printDeque(d);

	/*5.插入 - insert*/
	/*1)从开头插入一个数字500*/
	d.insert(d.begin(), 500);
	cout << "头部插入: ";
	printDeque(d);
	/*2)从开头插入两个数字1000*/
	d.insert(d.begin(), 2, 1000);
	cout << "头部插入2个元素: ";
	printDeque(d);
	/*3)按照区间插入*/
	deque<int>d1;
	d1.push_back(1);
	d1.push_back(2);
	d1.push_back(3);
	cout << "头部插入区间元素: ";
	d.insert(d.begin(), d1.begin(), d1.end());
	printDeque(d);

	cout << endl;

	return;
}

void test02()
{
	deque<int>d;

	d.push_back(10);
	d.push_back(20);
	d.push_front(100);
	d.push_front(200);
	d.push_front(300);

	cout << "容器中的元素:";
	printDeque(d);


	/*6.删除 - erase*/
	deque<int>::iterator it = d.begin();

	cout << "删除第二个元素:";
	it++;
	d.erase(it);
	printDeque(d);

	/*删除区间元素*/
	cout << "删除区间元素:";

	it = d.begin();/*跳过头部第一个元素,删除后边所有元素*/
	it++;
	d.erase(it, d.end());
	printDeque(d);

	/*7.清空 - clear*/
	d.clear();
	printDeque(d);

	if (0 != d.empty())
	{
		cout << "容器为空!" << endl;
	}

	return;
}
int main()
{
	test01();

	cout << "以下测试删除函数" << endl;

	test02();

	return 0;
}
运行结果

在这里插入图片描述

5.数据存取

/*1.利用[]方式访问数组中的元素*/
/*2.利用at方式访问数组中的元素*/
/*3.利用front(),返回容器第一个元素*/
/*4.利用back(),返回容器最后一个元素*/
工程代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<deque>

using namespace std;
/*1.利用[]方式访问数组中的元素*/
/*2.利用at方式访问数组中的元素*/
/*3.利用front(),返回容器第一个元素*/
/*4.利用back(),返回容器最后一个元素*/

void test01()
{
	deque<int>d;
	
	d.push_back(10);
	d.push_back(20);
	d.push_back(30);
	d.push_back(40);

	/*1.利用[]方式访问数组中的元素*/
	for (int i = 0; i < d.size(); i++)
	{
		cout << d[i] << " ";
	}
	cout << endl;
	
	/*2.利用at方式访问数组中的元素*/
	for (int i = 0; i < d.size(); i++)
	{
		cout << d.at(i) << " ";
	}
	cout << endl;

	/*3.利用front(),返回容器第一个元素*/
	cout << "容器的第一个元素为: " << d.front() << endl;

	/*4.利用back(),返回容器最后一个元素*/
	cout << "容器的最后一个元素为: " << d.back() << endl;

	return;
}


int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

6.排序操作

函数: sort()
1.默认是升序排列
2.添加仿函数可以降序排列
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;

void printDeque(const deque<int> &d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

class MyCompare
{
public:
	bool operator()(int v1, int v2)
	{
		return v1 > v2;
	}
};

void test01()
{
	deque<int>d;

	d.push_back(10);
	d.push_back(30);
	d.push_back(60);
	d.push_back(50);

	printDeque(d);

	cout << "排序过后" << endl;

	/*默认升序排列*/
	sort(d.begin(), d.end());

	printDeque(d);

	cout << "降序排列" << endl;

	/*仿函数-使其降序排列*/
	sort(d.begin(), d.end(), MyCompare());

	printDeque(d);

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

相关推荐

  1. 为什么stack和queue默认使用deque作为底层容器

    2024-04-04 10:56:01       52 阅读
  2. C++基础语法:STL之容器(3)--序列容器deque

    2024-04-04 10:56:01       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 10:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 10:56:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 10:56:01       82 阅读
  4. Python语言-面向对象

    2024-04-04 10:56:01       91 阅读

热门阅读

  1. HTTP不同版本的区别

    2024-04-04 10:56:01       34 阅读
  2. BitVM及其优化思考

    2024-04-04 10:56:01       31 阅读
  3. 路由的hash和history模式的区别

    2024-04-04 10:56:01       35 阅读
  4. nvm 安装多个版本的Node npm

    2024-04-04 10:56:01       33 阅读
  5. 如何设计一个类似Dubbo的RPC框架

    2024-04-04 10:56:01       30 阅读