C++ std::deque 基本用法

#include <iostream>
#include <string>
#include <deque>

// https://zh.cppreference.com/w/cpp/container/deque

// vector 和 deque 的差别
// https://www.cnblogs.com/zhuyf87/archive/2012/12/09/2809896.html

using namespace std;

int main()
{
	int a[] = { 1,2,3 };
	deque<int> deq = {1,2,3};

	//////////////////////////////////////////////////////////////////////////

	deq.assign(4, 5); // 5 5 5 5

	deque<int> deq1 = deq; // deep copy
	deq1[0] = 10;
	deq1.at(0) = 25;
	int vhead = deq1.front();
	int vtail = deq1.back();

	//////////////////////////////////////////////////////////////////////////
	// 迭代器

	for (auto it = deq1.begin(); it != deq1.end(); ++it)
	{
		std::cout << *it << " ";
	}
	std::cout << std::endl; // 25 2 3

	for (auto it = deq1.cbegin(); it != deq1.cend(); ++it)
	{
		std::cout << *it << " ";
	}
	std::cout << std::endl; // 25 2 3

	for (auto it = deq1.rbegin(); it != deq1.rend(); ++it)
	{
		std::cout << *it << " ";
	}
	std::cout << std::endl; // 3 2 25

	//////////////////////////////////////////////////////////////////////////

	bool isEmpty = deq1.empty();
	size_t size = deq1.size();
	size_t mSzie = deq1.max_size();

	deq1.clear();
	deq1.shrink_to_fit();

	deq1.insert(deq1.begin(), 6);
	deq1.emplace(deq1.begin(), 7);

	deq1.insert(deq1.begin(), 2, 55);

	deque<int> deqtt = {11,22,33};
	deq1.insert(deq1.begin(), deqtt.begin(), deqtt.end()); // 11 22 33 55 55 7 6 

	deq1.insert(deq1.begin(), {999, 888}); // 999 888 11 22 33 55 55 7 6 

	deq1.push_back(88);
	deq1.emplace_back(99);

	deq1.push_front(100);
	deq1.emplace_front(110);

	deq1.erase(deq1.begin());
	deq1.erase(deq1.begin(), deq1.end());

	deq1.swap(deqtt); // 交换的 size 大小不必一样

	//////////////////////////////////////////////////////////////////////////
	// resize 以及初始化值什么时候起作用

	deq1.clear();
	deq1.resize(2); // 0 0
	deq1.resize(2, 4); // 0 0  其中的 4 还不起作用。

	deq1.clear();
	deq1.resize(2, 4); // 4 4
	deq1.resize(2); // 4 4 没有改变 size,见下面的说明

	deq1.clear();
	deq1.resize(2); // 0 0
	deq1.resize(3, 4); // 0 0 4  当 size 要改变时,4 时新值的初始值!原来的空间时不会删除的,也不改变。

	deq1.clear();
	deq1.resize(2, 4); // 4 4
	deq1.resize(3); // 4 4 0 默认的 int 初始值为 0

	return 0;
}

  

原文地址:https://www.cnblogs.com/alexYuin/p/12080028.html

时间: 2024-11-08 23:38:02

C++ std::deque 基本用法的相关文章

std::deque

deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列.deque类常用的函数如下. (1)    构造函数 deque():创建一个空deque deque(int nSize):创建一个deque,元素个数为nSize deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t

boost::interprocess::managed_shared_memory(2)(std::deque)

struct shareDataEx : shareData { int index; int total_size; }; typedef managed_shared_memory::segment_manager segment_manager_t; //段管理器 typedef allocator<shareDataEx, segment_manager_t> mem_allocator; //定义基于shareDataEx类型的分配器 typedef deque<shareDa

C++ std::map::erase用法及其陷阱

1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map<string,string> mapTest; typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key); mapTest.erase(iter); 像上面这种删除单个节点,map的行为不会出现问题,但是当在一个循环里用的时候,往往会被误用. 2.陷阱 eg: for(ITER iter=mapTest

std::deque双端队列介绍

在建立vector容器时,一般来说伴随这建立空间->填充数据->重建更大空间->复制原空间数据->删除原空间->添加新数据,如此反复,保证vector始终是一块独立的连续内存空间:在建立deque容器时,一般便随着建立空间->建立数据->建立新空间->填充新数据,如此反复,没有原空间数据的复制和删除过程,是由多个连续的内存空间组成的. C++ STL容器deque和vector很类似,也是采用动态数组来管理元素. 与vector不同的是deque的动态数组首

C++ std::pair的用法

1 pair的应用 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair. pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量. 2 make_pair函数 template pair make_pair(T1 a, T2 b) { return pair(a

STL std::pair基本用法

std::pair 是一个结构体模板,其可于一个单元内存储两个相异对象.是 std::tuple 的拥有两个元素的特殊情况. 一般来说,pair 可以封装任意类型的对象,可以生成各种不同的 std::pair<T1, T2> 对象,可以是数组对象或者包含 std::pair<T1,T2> 的 vector 容器.pair 还可以封装两个序列容器或两个序列容器的指针. 1. 定义 #include <utility> template<class T1, class

python基础:deque的用法

deque(maxlen=N) 创建了一个固定长度的队列,当有新的记录加入而队列已满时会自动移动除最老的那条记录. 1 from collections import deque 2 d=deque(maxlen=3) 3 d.append(1) 4 d.append(2) 5 d.append(3) 6 print(d) 7 print(type(d)) 8 d.append(4) 9 print(d) 输出如下: deque([1, 2, 3], maxlen=3)<class 'colle

C++ std::vector 基本用法2

#include <iostream> #include <vector> using namespace std; int main() { int ar[10] = { 1,2,3,4,5,6,7,8,9,0 }; std::vector<int> vec5(ar, ar + 10); // reverse size_t cap1 = vec5.capacity(); // = 10 vec5.reserve(20); // = Request a change i

C++ std::array 基本用法

#include <iostream> #include <string> #include <array> using namespace std; // https://zh.cppreference.com/w/cpp/container/array int main() { ///array<int, 3> arr({ 1,2,3 }); // 非法 array<int, 3> arr1{ { 1,2,3 } }; // 不可以扩容,属于