c++ 11标准模板(STL) std::vector<bool> (二)

news2024/12/22 23:58:36
定义于头文件 <vector>

template<class Allocator>
class vector<bool, Allocator>;

 std::vector<bool> 是 std::vector 对类型 bool 为空间提效的特化。

std::vector<bool> 中对空间提效的行为(以及它是否有优化)是实现定义的。一种潜在优化涉及到 vector 的元素联合,使得每个元素占用一个单独的位,而非 sizeof(bool) 字节。

std::vector<bool> 表现类似 std::vector ,但为节省空间,它:

  • 不必作为连续数组存储元素(故 &v[0] + n != &v[n] )
  • 暴露类 std::vector<bool>::reference 为访问单个位的方法。尤其是,此类型的类为 operator[] 以值返回。
  • 不使用 std::allocator_traits::construct 构造位值。
  • 不保证同一容器中的不同元素能由不同线程同时修改。

表示到单个 bool 的引用的代理类

std::vector<bool>::reference

class reference;

 std::vector<bool> 特化定义 std::vector<bool>::reference 为可公开访问的嵌套类。 std::vector<bool>::reference 代理访问 std::vector<bool> 中单个位的行为。

std::vector<bool>::reference 的基础使用是提供能从 operator[] 返回的左值。

任何通过 std::vector<bool>::reference 发生的对 vector 的读或写,会潜在地读或写整个底层的 vector 。

成员函数

(构造函数)

构造引用,仅为 std::vector<bool> 自身所能访问
(公开成员函数)

(析构函数)

销毁引用
(公开成员函数)

operator=

赋 bool 给被引用位
(公开成员函数)

operator bool

返回被引用位
(公开成员函数)

flip

翻转被引用位
(公开成员函数)

std::vector<bool>::reference::~reference

~reference();

销毁引用。

std::vector<bool>::reference::operator=

reference& operator=( bool x );
reference& operator=( const reference& x );

(C++11 前)

reference& operator=( bool x ) noexcept;
reference& operator=( const reference& x ) noexcept;

(C++11 起)

赋值给被引用位。

参数

x-要赋值的值

返回值

*this

std::vector<bool>::reference::operator bool

operator bool() const;

(C++11 前)

operator bool() const noexcept;

(C++11 起)

返回被引用位。

参数

(无)

返回值

被引用位。

std::vector<bool>::reference::flip

void flip();

(C++11 前)

void flip() noexcept;

(C++11 起)

反转被引用位。

参数

(无)

vector<bool> 特定修改器

翻转所有位

std::vector<bool,Allocator>::flip

void flip();

 翻转 vector 中的每个 bool (以其反对值替换)。

参数

(无)

返回值

(无)

交换二个 std::vector<bool>::reference

std::vector<bool,Allocator>::swap

static void swap(reference x, reference y);

 交换 xy 的内容。

参数

x-要与 y 交换的 std::vector<bool>::reference 值
y-要与 x 交换的 std::vector<bool>::reference 值

返回值

(无)

复杂度

常数。

帮助类

std::vector<bool> 的哈希支持

std::hash (std::vector<bool>)

template <class Allocator> struct hash<vector<bool, Allocator>>;

(C++11 起)

 std::hash 对 std::vector<bool> 的模板特化允许用户获得 std::vector<bool> 类型对象的哈希。

调用示例

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <functional>
#include <time.h>
#include <vector>

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

    std::mt19937 g{std::random_device{}()};
    srand((unsigned)time(NULL));

    auto generate = []()
    {
        bool b = std::rand() % 2 == 0;
        return b;
    };

    std::vector<bool> vecor_bool_1(6);
    std::generate(vecor_bool_1.begin(), vecor_bool_1.end(), generate);
    std::cout << "vecor_bool_1:  ";
    std::copy(vecor_bool_1.begin(), vecor_bool_1.end(),
              std::ostream_iterator<bool>(std::cout, "   "));
    std::cout << std::endl;
    std::cout << std::endl;

    //翻转 vector 中的每个 bool (以其反对值替换)。
    std::cout << "void flip():  " << std::endl;
    vecor_bool_1.flip();
    std::cout << "vecor_bool_1:  ";
    std::copy(vecor_bool_1.begin(), vecor_bool_1.end(),
              std::ostream_iterator<bool>(std::cout, "   "));
    std::cout << std::endl;
    std::cout << std::endl;

    //交换 x 与 y 的内容。
    std::cout << "static void swap(reference x, reference y):  " << std::endl;
    vecor_bool_1.swap(vecor_bool_1[0], vecor_bool_1[1]);
    std::cout << "vecor_bool_1:  ";
    std::copy(vecor_bool_1.begin(), vecor_bool_1.end(),
              std::ostream_iterator<bool>(std::cout, "   "));
    std::cout << std::endl;
    std::cout << std::endl;

    return 0;
}

 输出

 

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

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

相关文章

使用ChatGPT完成部门和个人季度工作总结

“疫后元年“2023年的第一季度即将过去&#xff0c;相信各位社会人们都过得比往年更加紧张充实吧&#xff1f;转眼又到了完成季度工作总结的时间&#xff0c;完成本职工作之余还要抽出专门的时间完成优秀的工作总结报告&#xff0c;又更让大家本不富裕的休息时间雪上加霜。那么…

SCS【24】单细胞数据量化代谢的计算方法 (scMetabolism)

桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程&#xff0c;目前整理出来的相关教程目录如下&#xff1a; Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅&#xff0c;述说单细胞测序的前世…

Oracle Cloud和足球

Oracle除了我们熟知的数据库产品&#xff0c;它还有很多技术和产品栈&#xff0c;而且在实践层面&#xff0c;已经有了很多可借鉴的案例&#xff0c;如果了解英超的朋友&#xff0c;可以发现最近几个赛季&#xff0c;英超的转播画面图标中&#xff0c;会出现Oracle Cloud&#…

操作系统的最强入门科普(Unix/Linux篇)

大家好&#xff0c;我是小枣君。 今天这篇文章&#xff0c;我们来聊聊操作系统&#xff08;Operating System&#xff09;。 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑&#xff0c;使用的是windows和macOS系统&#xff1b;用…

为什么拿低绩效的人从来不反思自己的原因?连公司的前90%都挤不进去,还好意思找别人的理由?...

绩效是关乎打工人切身利益的大事&#xff0c;拿了高绩效欢天喜地&#xff0c;拿了低绩效垂头丧气&#xff0c;这是人之常情&#xff0c;但最近一位字节跳动的程序员却怒斥那些拿低绩效的人&#xff1a; 为什么拿m-&#xff08;低绩效&#xff09;的人从来不反思自己垫底的原因&…

C++三部曲|C++核心思想

| 导语 C 的起源可以追溯到 40 年前&#xff0c;但它仍然是当今使用最广泛的编程语言之一&#xff0c;C发明人Bjarne Stroustrup 一开始没想到 C 会获得如此大的成功&#xff0c;他说&#xff1a;“C 的成功显然令人惊讶。我认为它的成功取决于其最初的设计目标&#xff0c;就是…

前端014_标签模块_修改功能

标签模块_修改功能 1、需求分析2、Mock 添加查询数据3、Mock 添加提交修改数据4、Api 调用接口回显数据5、提交修改后的数据6、验证1、需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出标签信息渲染。修改后点击确定 提交修改数据。 2、Mock 添加查询数据 请求URL: /a…

在OpenCV中使用Canny边缘检测

边缘检测是非常常见和广泛使用的图像处理&#xff0c;对于许多不同的计算机视觉应用非常必要&#xff0c;如数据提取&#xff0c;图像分割&#xff0c;在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量&#xff0c;但保留了图像的结构。 Python中的Canny边缘…

祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说

在祁宁家里&#xff0c;有一套完整的赛车模拟器&#xff0c;他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友&#xff0c;除了享受速度与激情带来的愉悦感&#xff0c;祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。 Answer.dev 就是将技术…

Studio Bot - 让 AI 帮我写 Android 代码

Google I/O 2023 不出所料&#xff0c;今年的 I/O 大会只突出了一个关键词 “AI”。Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了 Studio bot 功能&#xff0c;希望通过 AI 帮助开发者更轻松地写代码&#xff1a; Studio Bot…

STM32F4_内部温度传感器

目录 1. 什么是温度传感器 2. 温度传感器简介 3. 库函数配置内部温度传感器 4. 实验程序 4.1 main.c 4.2 ADC.c 4.3 ADC.h 1. 什么是温度传感器 温度传感器是一种测量物体冷热程度的设备&#xff0c;以可读的方式通过电信号提供温度测量。比较常见的如热电偶温度传感器。…

越来越多的单身女性开始买房了

近日&#xff0c;越来越多的单身女性开始购买房产&#xff0c;这一现象引起了社会的广泛关注。 根据中国青年报社会调查中心联合问卷网对2006名受访者进行的一项调查显示&#xff0c;84.2%的受访者认为近几年身边单身女性购房的现象增多了&#xff0c;而93.9%的受访者支持单身女…

无监督域适应 (UDA)(3)

本帖介绍基于 bi-classifier adversarial learning 的改进。 一、动机 模型训练在两个步骤之间交替进行:(I)约束两个分类器的学习&#xff0c;以最大化未标记目标域数据的预测差异;(II)约束特征提取器的学习&#xff0c;以最小化这种差异。 尽管这种方法是一种优雅的表述&am…

Call for Papers丨第一届LLM@IJCAI‘23 Symposium,大会主席陈雷、杨强、唐杰

大规模语言模型&#xff08;LLMs&#xff09;&#xff0c;如ChatGPT和GPT-4&#xff0c;以其在自然语言理解和生成方面的卓越能力&#xff0c;彻底改变了人工智能领域。 LLMs广泛用于各种应用&#xff0c;如语音助手、推荐系统、内容生成模型&#xff08;如ChatGPT&#xff09…

开源进展 |WeBASE更新啦,快来了解新特性!

WeBASE&#xff08;WeBank Blockchain Application Software Extension&#xff09; 是在区块链应用和FISCO BCOS底层之间搭建的一套通用组件&#xff0c;围绕交易、合约、密钥管理、数据、可视化管理来设计各个模块&#xff0c;屏蔽了区块链底层的复杂度&#xff0c;从而极大降…

多模态GPT:国内发布一款可以在线使用的多模态聊天机器人!快来把玩~

论文: MultiModal-GPT: A Vision and Language Model for Dialogue with Humans代码: https://github.com/open-mmlab/Multimodal-GPT &#xff08;包含代码、数据、demo&#xff09;作者&#xff1a;OpenMMLab 深度学习自然语言处理 原创作者: 林哲乐 使用视觉和语言指令训练一…

Linux基础学习---3、时间日期类、用户管理命令、用户组管理命令

1、时间日期类 1、基本语法date [Option] ...[Format]2、选项说明 选项功能-d<时间字符串>显示指定的“时间字符串”表示的时间&#xff0c;而非当前时间-s<日期时间>设置日期时间 3、参数说明 参数功能<日期时间格式>指定显示时使用的日期时间格式 1.1…

一、数据库设计

整个项目的设计包括5个数据库&#xff1a; glkt_activity:优惠券的相关设计 glkt_order:订单的相关设计 glkt_user:得到微信授权的账号信息的相关设计 glkt_vod:课程信息的相关设计 glkt_wechat:微信公众号的相关设计 glkt_activity&#xff1a; coupon_info:优惠券的信息 cou…

java+iClient Openlayers实现土壤墒情旱情灾害模拟预报预警分析

应用及软件实现效果图&#xff1a; 一、应用背景 作为一个农村长大的人&#xff0c;我非常关注自然灾害和气候变化对土地旱情墒情影响。近年来&#xff0c;干旱和洪涝灾害在很多地方频繁发生&#xff0c;给人们的生命财产安全带来了极大的威胁。因此&#xff0c;旱情和墒情模拟…

在计算语义相似度中,我看网上说要加range,我不知道往哪里加?

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 行宫见月伤心色&#xff0c;夜雨闻铃肠断声。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银交流群【王王雪饼】问了一个Python处理语义相…