C++ //练习 13.40 为你的StrVec类添加一个构造函数,它接受一个Initializer_list<string>参数。

C++ Primer(第5版) 练习 13.40

练习 13.40 为你的StrVec类添加一个构造函数,它接受一个Initializer_list参数。

环境:Linux Ubuntu(云服务器)
工具:vim

 

代码块
/*************************************************************************> File Name: ex13.39.cpp> Author: > Mail: > Created Time: Fri 26 Apr 2024 08:38:31 AM CST************************************************************************/#include<iostream>
#include<memory>
#include<utility>
#include<initializer_list>
using namespace std;class StrVec{public:StrVec(): elements(nullptr), first_free(nullptr), cap(nullptr) {}StrVec(const StrVec &);StrVec(initializer_list<string>li);StrVec &operator= (const StrVec &);~StrVec();void push_back(const string &);size_t size() const { return first_free - elements; } size_t capacity() const { return cap - elements; }string *begin() const { return elements; }string *end() const { return first_free; }void reserve(size_t s);void resize(size_t s);private:Static allocator<string> alloc;void chk_n_alloc(){ if (size() == capacity()) reallocate(); }pair<string*, string*>alloc_n_copy(const string*, const string*);void free();void reallocate();string *elements;string *first_free;string *cap;
};void StrVec::push_back(const string &s){chk_n_alloc();alloc.construct(first_free++, s);
}pair<string*, string*>StrVec::alloc_n_copy(const string *b, const string *e){auto data = alloc.allocate(e - b);return {data, uninitialized_copy(b, e, data)};
}void StrVec:free(){if(elements){for(auto p = first_free; p != elements; ){alloc.destroy(--p);}alloc.deallocate(elements, cap - elements);}
}StrVec::StrVec(const StrVec &s){auto newdata = alloc_n_copy(s.begin(), s.end());elements = newdata.first;first_free = cap = newdata.second;
}StrVec::~StrVec() { free(); }StrVec &StrVec::operator= (const StrVec &rhs){auto data = alloc_n_copy(rhs.begin(), rhs.end());free();elements = data.first;first_free = cap = data.second;return *this;
}void StrVec::reallocate(){auto newcapacity = size() ? 2 * size() : 1;auto newdata = alloc.allocate(newcapacity);auto dest = newdata;auto elem = elements;for(size_t i = 0; i != size(); ++i){alloc.construct(dest++, move(*elem++));}free();elements = newdata;first_free = dest;cap = elements + newcapacity;
}void StrVec::reserve(size_t s){if(s <= size()){return;}auto newElem = alloc.allocate(s);auto dest = newElem;auto elem = elements;for(size_t i = 0; i != size(); ++i){alloc.construct(dest++, move(*elem++));}free();elements = newElem;cap = newElem + s;first_free = dest;
}void StrVec::resize(size_t s){if(s > capacity()){return ;}if(s < size()){auto newFisrt = first_free;for(size_t i = 0; i != size() - s; ++i){alloc.destroy(--newFirst);}fisrt_free = newFirst;return ;}else if(s == size()){return ;}else{auto newFirst = first_free;for(size_t i = 0; i != s - size(); ++i){alloc.construct(newFirst++, "");}first_free = newFirst;return ;}
}

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

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

相关文章

微软的access数据库使用

“小规模数据用Excel&#xff0c;大规模数据用Access。” 当涉及到大规模数据时&#xff0c;使用excel非常的卡顿&#xff0c;使用access就不会出现这个问题。 一、常用操作 1.新建一个数据库 直接右键&#xff0c;新建 access数据库 2.excel内容导入到access中&#xff08;成…

【Web UI自动化】Python+Selenium 环境配置

安装Python 官网地址&#xff1a;https://www.python.org/&#xff0c;Downloads菜单下选择适合自己的系统版本&#xff0c;我的是Windows。 点击进入以后&#xff0c;可以看到当前最新版本。 点击上面的链接&#xff0c;页面下滑&#xff0c;找到下载链接&#xff0c;根据…

天冕科技亮相第十七届深圳国际金融博览会!

第十七届深圳国际金融博览会在深圳会展中心正式开幕&#xff0c;天冕科技跟随南山区组团集体亮相&#xff0c;充分展现金融活力。此次金博会&#xff0c;南山区政府共遴选了包括天冕科技在内的三家优秀金融科技企业组团参展&#xff0c;以特色与创新的案例展示了辖区金融业发展…

【简单讲解下FastStone Capture】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

python部署linux

项目做完了&#xff0c;就涉及到了部署 部署 Python的打包部署方式有多种&#xff0c;具体取决于项目的需求、规模以及所使用的工具。以下是几种常见的Python打包部署方式&#xff1a; 使用pip安装&#xff1a;对于小型的Python库或工具&#xff0c;通常可以直接通过pip进行安…

idea添加scala库,src\main\scala‘ is duplicated in module ‘XXX‘.

环境&#xff1a; jdk 17 scala 2.11.8 IntelliJ IDEA 2023.1.1 (Ultimate Edition) Windows 10 专业版 22H2 报错解释&#xff1a; 这个错误表明在IntelliJ IDEA中的Scala模块&#xff08;名为XXX&#xff09;配置中存在重复的目录。具体来说&#xff0c;src\main\scala目…

目标检测应用场景—数据集【NO.33】血细胞图像分类和检测数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…

类加载器和双亲委派机制体会及分析和arthas使用

类加载器的分类 验证流程使用arthas arthas下载地址 Releases alibaba/arthas (github.com) 使用过程 想要被arthas识别到 需要让应用程序不退出 System.in.read(); 随便运行一个类 public class HshbDemo {public static final int a 1;public static void main(String…

头歌:RDD的创建 -Scala

第1关&#xff1a;集合并行化创建RDD 任务描述 本关任务&#xff1a;计算并输出各个学生的总成绩。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.集合并行化创建RDD&#xff0c;2.reduceByKey算子、foreach算子 集合创建RDD Spark会将集合中的数据拷贝到集…

企业营销战略新思考:营销5.0与开源AI智能名片S2B2C商城小程序引领私域流量经营新纪元

随着互联网的深入发展&#xff0c;企业营销战略已经不再是单一、静态的规划&#xff0c;而是一个持续进化、与市场紧密相连的动态过程。在这个过程中&#xff0c;营销5.0和开源AI智能名片S2B2C商城小程序的结合&#xff0c;为企业营销战略注入了新的活力&#xff0c;也为私域流…

IntelliJ IDEA - Auto filling Java call arguments 插件教程

首先&#xff0c;安装该插件&#xff0c;下载完毕后重启 IDEA 当 userService 中方法需要参数的时候&#xff0c;我们一般都是自己手动写这些参数&#xff0c;是很费劲的。因此就出现了一个插件解决这类问题 Auto filling Java call arguments 光标点击需要填写参数的位置 Alt …

深入理解Java消息中间件-性能优化和调优

性能优化和调优是构建高性能系统的重要环节&#xff0c;这对于Apache Kafka这样的消息中间件尤为重要。下面我们将介绍一些具体的性能优化和调优操作方式&#xff0c;以帮助你更好地利用Kafka来构建高性能的消息系统。 合理配置Kafka集群&#xff1a;合理配置Kafka集群的节点数…

ESP32-C3第二路串口(非调试)串口打通(4)

接前一篇文章&#xff1a;ESP32-C3第二路串口&#xff08;非调试&#xff09;串口打通&#xff08;3&#xff09; 本文内容参考&#xff1a; 基于 esp-idf 的 UART 应用例程解读_uart asynchronous example with separate receive an-CSDN博客 特此致谢&#xff01; 上一回对…

2024.4.29力扣每日一题——将矩阵按对角线排序

2024.4.29 题目来源我的题解方法一 模拟 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1329 我的题解 方法一 模拟 先以第一行的每个元素作为对角线的开始&#xff0c;然后再以第一列的每个元素作为对角线的开始。并在遍历过程中记录&#xff08;数组或者list&#xf…

品深茶的抗癌效果怎么样?

茶叶中的一些成分&#xff0c;如茶多酚、儿茶素等&#xff0c;具有抗氧化和抗炎作用&#xff0c;这些作用在一定程度上可以抑制癌细胞的生长和扩散。 然而&#xff0c;这些成分在茶叶中的含量和生物利用率会受到多种因素的影响&#xff0c;如茶叶的品种、制作工艺、饮茶方式等…

rk356x 关于yocto编译linux及bitbake实用方法

Yocto 完整编译 source oe-init-build-envbitbake core-image-minimalYocto 查询包名 bitbake -s | grep XXX // 获取rockchip相关包 :~/rk3568/yocto$ bitbake -s | grep rockchip android-tools-conf-rockchip :1.0-r0 gstreamer1.0-rockchip …

我开源了一款阿里云OSS的spring-boot-starter

在上一篇文章中我们介绍了如何使用SpringBoot集成阿里云oss&#xff1a; 什么&#xff01;没有Starter的阿里云OSS也能集成到SpringBoot&#xff1f; 但是这个方式还是需要自己去写配置类去配置很多的东西&#xff0c;那么我在想&#xff0c;为什么不自己写一个阿里云OSS的spri…

K8s: Prometheus 服务结构以及基础抓取数据服务部署

Prometheus 发布应用之后&#xff0c;就有持续运维的事情&#xff0c;就是平台监控Prometheus 是一个云原生的日志监控平台&#xff0c;是一个实时标准的一个技术它是著名的 cncf 里的一个重要的开源项目 上面整个图片是在云原生应用及K8s应用架构下的一个日志监控的一个标准的…

杰发科技AC7840——SPI通信简介(1)_跑通Demo

0. 简介 一些配置项&#xff1a; CPHA&#xff1a;相序 CPLO&#xff1a;极性 看着demo需要按键&#xff0c;于是去掉按键&#xff0c;去掉打印&#xff0c;直接输出波形看逻辑分析仪的信号。 其实现在做这些demo测试应该都有逻辑分析仪&#xff0c;直接看波形更直观一点。…

【C 数据结构】图的存储结构

文章目录 【 1. 图的顺序存储结构 】1.1 基本原理1.2 顺序存储结构的 C 实现 【 2. 图的链式存储结构 】2.1 图的临接表存储结构2.1.1 临接表的 基本原理2.1.2 临接表的 链表节点2.1.3 邻接表 各结构体的C实现2.1.4 临接表 计算顶点的出度和入度邻接表计算 无向图的出度和入度邻…