c++11 标准模板(STL)(std::deque)(二)

news2024/11/18 7:32:17

构造函数

std::deque<T,Allocator>::deque

deque();

(1)

explicit deque( const Allocator& alloc );

(2)
explicit deque( size_type count,

                const T& value = T(),

                const Allocator& alloc = Allocator());
(3)(C++11 前)
         deque( size_type count,

                const T& value,

                const Allocator& alloc = Allocator());
(C++11 起)

explicit deque( size_type count );

(4)(C++11 起)
(C++14 前)

explicit deque( size_type count, const Allocator& alloc = Allocator() );

(C++14 起)
template< class InputIt >

deque( InputIt first, InputIt last,

       const Allocator& alloc = Allocator() );
(5)

deque( const deque& other );

(6)

deque( const deque& other, const Allocator& alloc );

(6)(C++11 起)

deque( deque&& other );

(7)(C++11 起)

deque( deque&& other, const Allocator& alloc );

(8)(C++11 起)

deque( std::initializer_list<T> init,
       const Allocator& alloc = Allocator() );

(9)(C++11 起)

从各种数据源构造新容器,可选地使用用户提供的分配器 alloc

1) 默认构造函数。构造拥有默认构造的分配器的空容器。

2) 构造拥有给定分配器 alloc 的空容器。

3) 构造拥有 count 个有值 value 的元素的容器。

4) 构造拥有个 count 默认插入的 T 实例的容器。不进行复制。

5) 构造拥有范围 [first, last) 内容的容器。

InputIt 是整数类型,则此构造函数拥有的效果同 deque(static_cast<size_type>(first), static_cast<value_type>(last), a) 。

(C++11 前)

此重载仅若InputIt 满足遗留输入迭代器 (LegacyInputIterator) 才参与重载决议,以避免和重载 (2) 的歧义。

(C++11 起)

6) 复制构造函数。构造拥有 other 内容的容器。若不提供 alloc ,则如同通过调用 std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()) 获得分配器。

7) 移动构造函数。用移动语义构造拥有 other 内容的容器。分配器通过属于 other 的分配器移动构造获得。

8) 有分配器扩展的移动构造函数。以 alloc 为新容器的分配器,从 other 移动内容;若 alloc != other.get_allocator() ,则它导致逐元素移动。

9) 构造拥有 initializer_list init 内容的容器。

参数

alloc-用于此容器所有内存分配的分配器
count-容器的大小
value-以之初始化容器元素的值
first, last-复制元素的来源范围
other-用作初始化容器元素来源的另一容器
init-用作初始化元素来源的 initializer_list

复杂度

1-2) 常数

3-4) 与 count 成线性

5) 与 firstlast 的距离成线性

6) 与 other 的大小成线性

7) 常数。

8) 若 alloc != other.get_allocator() 则为线性,否则为常数。

9) 与 init 的大小成线性。

异常

Allocator::allocate 的调用可能抛出。

注意

在容器移动构造(重载 (7) )后,指向 other 的引用及迭代器(除了尾迭代器)保持合法,但指代现于 *this 中的元素。当前标准由 [container.requirements.general]/12 中的总括陈述作出此保证,而 LWG 2321 正在考虑更严格的保证。

析构函数

std::deque<T,Allocator>::~deque

~deque();

销毁容器。调用元素的析构函数,然后解分配所用的存储。注意,若元素是指针,则不销毁所指向的对象。

复杂度

与容器大小成线性。

调用示例

#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
    std::cout << std::boolalpha;

    {
        //1) 默认构造函数。构造拥有默认构造的分配器的空容器。
        std::deque<string> deque1;
        std::cout << "default structure: empty " << deque1.empty() << std::endl;
        std::cout << std::endl;
    }

    {
        //3) 构造拥有 count 个有值 value 的元素的容器。
        std::deque<string> deque2(10, "A");
        //打印容器
        std::copy(deque2.begin(), deque2.end(), std::ostream_iterator<string>(std::cout, " "));
        std::cout << std::endl;
        std::cout << std::endl;
    }

    {
        //4) 构造拥有个 count 默认插入的 T 实例的容器。不进行复制。
        std::deque<string> deque3(10);
        std::cout << "deque3 size: " << deque3.size() << std::endl;
        std::copy(deque3.begin(), deque3.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;
        std::cout << std::endl;
    }

    {
        std::deque<string> deque1(10, "A");
        std::cout << "deque1:   ";
        std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;

        //5) 构造拥有范围 [first, last) 内容的容器。
        std::deque<string> deque2(deque1.begin(), deque1.end());
        std::cout << "deque2:   ";
        std::copy(deque2.begin(), deque2.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;
        std::cout << std::endl;
    }

    {
        std::deque<string> deque1(10, "A");
        std::cout << "deque1:   ";
        std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;

        //6) 复制构造函数。构造拥有 other 内容的容器。
        std::deque<string> deque2(deque1);
        std::cout << "deque2:   ";
        std::copy(deque2.begin(), deque2.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;
        std::cout << std::endl;
    }

    {
        std::deque<string> deque1(10, "A");
        std::cout << "deque1:   ";
        std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;

        //7) 移动构造函数。用移动语义构造拥有 other 内容的容器。分配器通过属于 other 的分配器移动构造获得。
        std::deque<string> deque2(std::move(deque1));
        std::cout << "deque1:   ";
        std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;

        std::cout << "deque2:   ";
        std::copy(deque2.begin(), deque2.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;
        std::cout << std::endl;
    }

    {
        //9) 构造拥有 initializer_list init 内容的容器。
        std::deque<string> deque1({"A", "B", "C", "D", "E", "A", "B", "C", "E", "F"});
        std::cout << "deque1:   ";
        std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;

        std::deque<string> deque2{"A", "B", "C", "D", "E", "A", "B", "C", "E", "F"};
        std::cout << "deque2:   ";
        std::copy(deque2.begin(), deque2.end(), std::ostream_iterator<string>(std::cout, "-"));
        std::cout << std::endl;
    }

    return 0;
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络编程 完成端口模型

1.概念以及重叠IO存在的问题 2.完成端口代码详解 整体流程 使用到的新函数 1.CreateIoCompletionPort函数 该函数创建输入/输出 (I/O) 完成端口并将其与指定的文件句柄相关联&#xff0c;或创建尚未与文件句柄关联的 I/O 完成端口&#xff0c;以便稍后关联&#xff0c;即创建…

金融业务的数据存储选型

为什么用关系型数据库&#xff1f;最常见的理由是别人在用&#xff0c;所以我也得用&#xff0c;但是这个并不是理由&#xff0c;而是借口。 1 数据分类 选择数据存储类型前&#xff0c;先分析数据特点&#xff0c;才能针对性选择存储方案。 通常按数据与数据之间关系的复杂…

SSM2---spring

Spring spring环境搭建 创建一个空白模块&#xff0c;目录结构如下 在pom.xml文件中引入相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/…

基于SSM(Spring+SpringMVC+Mybatis)实现的个人博客系统,含数据库文件及详细说明

关于项目 该博客是基于SSM实现的个人博客系统&#xff0c;适合初学SSM和个人博客制作的同学学习。 最新版本支持用户注册&#xff0c;包含用户和管理员两个角色 。 博主已写了一篇该项目的毕业论文和录制了2个小时的代码讲解可以供大家学习&#xff0c;需要的可以联系博主&…

RFID在模块管理中的应用

应用背景 模具是工业生产的基础工艺装备&#xff0c;被称为“工业之母”。作为国民经济的基础行业&#xff0c;模具涉及机械、汽车、轻工、电子、化工、冶金、建材等各个行业&#xff0c;应用范围十分广泛。模具资产管理采用传统的人工纸质记录的方式已经无法及时有效的进行&am…

还在用 XShell - 试试 IntelliJ IDEA 的 SSH

SSH 是很多人用得不多&#xff0c;但是又不得不用的工具。 如果你不是搞运维&#xff0c;没有必要搞个 CRT&#xff0c;XShell 也够用了&#xff0c;但是这 2 个都是收费软件&#xff0c;同时还不太便宜。 试试 IDEA 的 SSH 其实 IntelliJ IDEA 已经提供了 SSH 的功能。 如…

053-线程的状态改变及线程同步详细介绍

【上一讲】051-java线程的2种实现方法详解_CSDN专家-赖老师(软件之家)的博客-CSDN博客 线程可以处于以下四个状态之一1.新建(new):线程对象已经建立,但还没有启动,所以他不能运行。2.就绪(runnable):这种状态下,只要调度程序把时间片分配给线程就可以执行,也就是说…

10分钟带你了解什么是ArrayBuffer?

前言 很多时候我们前端开发是用不到 ArrayBuffer 的&#xff0c;但是用不到 ArrayBuffer 不代表我们不需要了解这个东西。本文就围绕 ArrayBuffer 来讲一下相关知识&#xff0c;大概需要10分钟左右就可以读完本文。 什么是ArrayBuffer&#xff1f; 描述 ArrayBuffer 对象用…

Paramiko库讲解

目录 基本概念 Paramiko组件架构 Key handing类 Transport类 SFTPClient类 SSHClient类—主要使用的类 Python编写完整例子 基本概念 Paramiko是Python实现SSHv2协议的模块&#xff0c;支持口令认证和公钥认证两种方式 通过Paramiko可以实现通过Python进行安全的远程命…

Html5网页播放器的同层播放功能

Html5网页播放器的同层播放功能&#xff1a; 在Android手机上使用H5播放视频时&#xff0c;大多数的国内浏览器厂商都会在视频播放时劫持<video>标签&#xff0c;使用浏览器自带的播放器播放视频&#xff0c;而且播放器会处于最高层级&#xff0c;视频上面无法显示其它h…

数影周报:字节跳动员工违规获取TikTok用户数据,阿里组织调整

本周看点&#xff1a;字节跳动员工违规获取TikTok用户数据&#xff1b;钉钉宣布用户数破6 亿&#xff1b;阿里组织调整&#xff1b;星尘数据完成 5000 万元 A 轮融资...... 数据安全那些事 字节跳动员工违规获取TikTok用户数据 字节跳动旗下热门应用TikTok日前曝出严重风波。字…

郭德纲落选,冯巩、赵炎上榜,国家非物质文化遗产传承人评选落幕

根据国家广电局26日消息&#xff0c;经过激烈的竞争&#xff0c;国家非物质文化遗产传承人评选工作&#xff0c;已经顺利落下帷幕。 在此次评选活动当中&#xff0c;评委会一致审议通过&#xff0c;著名相声演员冯巩和赵炎&#xff0c;被评为了非物质文化遗产传承人。而呼声很高…

Linux | 进程理解 | 进程的终止,等待与替换 | 环境变量的介绍与使用

文章目录进程终止进程终止的方法操作系统是怎么终止进程的&#xff1f;进程等待为何需要等待进程&#xff1f;怎么等待一个进程&#xff1f;非阻塞式等待进程替换什么是进程替换&#xff1f;为什么要进程替换&#xff1f;怎样替换一个进程&#xff1f;exec系列函数环境变量用命…

企业微信开发(一)常见问题收集及解决方案

持续收集企业微信开发中遇到疑难杂症&#xff0c;并给出相应的解决方案 一、好友上限&#xff08;84061&#xff09; 背景&#xff1a;达到添加好友数上限的员工&#xff0c;新增自动通过的好友&#xff0c;无法拉取到客户信息。 根因&#xff1a;企业微信业务限制 员工添加的…

启辰全面转型新能源,能否创造风日产第二增长曲线?

随着新能源汽车市占率的不断增长&#xff0c;传统汽车大厂加大了在新能源汽车领域的布局。这其中决心最大的当属东风日产&#xff0c;第二品牌——“启辰”全面转型新能源&#xff0c;告别纯然有车开发。 12月30日&#xff0c;以“新科技 新生活”为主题的第二十届广州车展盛大…

Linux系统定时信号SIGALRM的触发与alarm函数的使用

1、 定时信号SIGALRM的用途 在编程的过程中&#xff0c;很多时候我们需要为程序设置一个闹钟&#xff0c;然后到了闹钟设定的时刻然后再去采取相关的操作。比如进行socket编程时&#xff0c;如果客户端长时间没有与服务器进行交互&#xff0c;需要服务器在一定时间之后主动关闭…

Linux | 权限管理

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

Vue(二)

1. 模板语法 1.1 实现效果 1.2 模板的理解 不加v-bind就相当于直接把双引号里的东西当成字符串执行&#xff0c;加了bind双引号里的东西就当成js表达式执行 v-bind:可以简写成&#xff1a; 起始标签和结束标签中间夹着的就是标签体 <!DOCTYPE html> <html><hea…

【数据结构】插入排序、希尔排序、冒泡排序、选择排序

文章目录 一、直接插入排序 思想 程序代码 时间复杂度 二、希尔排序 思想 程序代码 时间复杂度 三、冒泡排序 思想 程序代码 时间复杂度 四、选择排序 思想 程序代码 时间复杂度 一、直接插入排序 思想 直接插入排序有些类似于我们玩扑克牌时的整理牌序动作&a…

目标检测中常见的神经网络组成层------Pytorch

物体检测中常见的神经网络组成层 文章目录物体检测中常见的神经网络组成层卷积层激活函数层池化层Dropout层全连接层常见的物体检测算法常用卷积层、池化层、全连接层、激活函数层、Dropout层。 卷积层 CNN–各层的介绍_Miracle Fan的博客-CSDN博客_cnn各层介绍 在pytorch中…