Exceptional C++读书笔记——泛型程序设计与C++标准库

更新中——上次更新(2023.07.13-23:07)

迭代器(iterator)

#include  <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

int main()  
{  
    std::vector<int> e;  
    std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(e));  
  
    std::vector<int>::iterator first = std::find(e.begin(), e.end(), 1);  
    std::vector<int>::iterator last = std::find(e.begin(), e.end(), 3);  
    /*错误一:
        当e中不存在3的时候,last等于e.end(),这个值是不能被解引用的
    */
  
    std::copy(first, last, std::ostream_iterator<int>(std::cout, ","));  
    /**
     * 错误二:
     * 这里也有问题 因为first可能再last之后,copy中first必须再last之前。[first, last)
    */

    e.insert(--e.end(), 9);  
    /**
     * --end():
     *      错误一,应该写成e.end() - 1,这个我没看懂,后面看下 懂了补上。。。
     *      错误二:如果e是空的,那么不管写成--e.end()还是e.end()- 1 都是错的
    */
    std::cout << std::endl;
    std::copy(first, last, std::ostream_iterator<int>(std::cout, ","));  
    /**
     * first和last可能已经不是有效的迭代器了,因为vector再插入一个元素后可能会发生重新分配内存的情况,这样就会导致first和last失效了。
    */
  
    return 0;  
}

在使用迭代器时,我们需要注意:

  • 迭代器的有效值:这个迭代器可以被解引用吗?
  • 迭代器的有效生存期:在使用的时候这个迭代器还是有效的吗?
  • 迭代器的有效范围:两个迭代器是否能构成一个有效范围
  • 对内置类型的非法操作:程序是否尝试修改一个临时变量

大小写不敏感的字符串之一

下面实现一个ci_string,和string的区别是ci_string对大小写不敏感
因为string的定义:
在这里插入图片描述
所以string = basic_string<char, char_traits<char>, allocator<char>>
又因为字符串比较相关的逻辑在char_traits中,所以就只要写一个类去继承char_traits就好,然后把关键的函数重写一下。所以就有了下面的代码。(这种方式也有弊端,下一部分考虑,这里暂不考虑)

#include <string>
#include <iostream>

struct ci_char_traits : public std::char_traits<char>
{
    static bool eq(char char1, char char2)
    {
        return toupper(char1) == toupper(char2);
    }
    static bool lt(char char1, char char2)
    {
        return toupper(char1) <= toupper(char2);
    }
    static int compare(const char *s1, const char *s2, size_t n)
    {
        for (size_t i = 0; i < n; i++)
        {
            if (toupper(s1[i]) < toupper(s2[i]))
            {
                return -1;
            }
            else if (toupper(s1[i]) > toupper(s2[i]))
            {
                return 1;
            }
        }
        return 0;
    }
    static const char *find(const char *s, int n, char a)
    {
        while (n-- > 0 && toupper(*s) != toupper(a))
        {
            ++s;
        }
        return n >= 0 ? s : 0;
    }
};

typedef std::basic_string<char, ci_char_traits> ci_string;

int main()
{
    ci_string s1 = "A";
    ci_string s2 = "a";
    if (s1 == s2)
    {
        std::cout << "相等" << std::endl;
    }
    return 0;
}

大小写不敏感的字符串之二

TODO: 待更新

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10_SPI_Flash 连续写实验

10_SPI_Flash 连续写实验 1. 实验目标2. 连续写方法3. 操作时序4. 流程框图4.1 顶层模块4.2 连续写模块 5. 波形图6. RTL6.1 flash_seq_wr_ctrl6.2 spi_flash_seq_wr 7. Testbench 1. 实验目标 使用页写指令&#xff0c;将串口发送过来的连续不定量数据写入 Flash。本实验中&a…

Redis【实战篇】---- 秒杀优化

Redis【实战篇】---- 秒杀优化 1. 秒杀优化-异步秒杀思路2. 秒杀优化-Redis完成秒杀资格判断3. 秒杀优化-基于阻塞队列完成秒杀优化 1. 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c…

如何在没有软件的情况下将 PDF 转换为 PPT(100% 免费)

演示文稿由文字、图片、音频、动画等元素组成&#xff0c;通常用于会议、课堂或演讲中&#xff0c;展示演讲者想要表达的主要内容。如果您遇到重要文档以 PDF 格式存储&#xff0c;但现在需要转换为 PPT 格式的情况&#xff0c;请不要担心。我们本指南的目标是帮助用户将 PDF 转…

Qt + QR-Code-generator 生成二维码

0.前言 之前使用 libgrencode 生成二维码&#xff0c;LGPL 协议实在不方便&#xff0c;所以需要找一个 github 星星多的&#xff0c;代码简单最好 header-only&#xff0c;协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。 QR-Code-generator 正好符合这个要求&#xff0c…

【自定义类型】(结构体、枚举、联合)

结构体内存对齐&#xff1a; 计算结构体的大小 结构体成员不是按照顺序在内存中连续存放的而是有一定的对齐规则的 结构体内存对齐的规则&#xff1a; 1、结构体的第一个成员永远放在相比于结构体变量起始位置的偏移量为0的位置。 2、从第二个成员开始&#xff0c;往后的每…

Gateway服务集成Nacos2021.0.4错误解决

问题 gateway服务集成nacos&#xff0c;启动后报错&#xff1a; Caused by: com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information:; 版本&#xff1a; jdk:1.8 spring-b…

Node连接Mongodb数据库

1.初始化 npm init 2.安装mongoose npm i mongoose 3.导入mongoose const mongooserequire("mongoose") 4.连接mongodb服务 mongoose.connect("mongodb://127.0.0.1:27017/user") 说明&#xff1a;mongodb是协议,user是数据库&#xff0c;如果没有会自动创…

C#使用跨平台的PdfSharpCore开源库生成PDF文件

一、需求说明 在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: 二、需求分析 ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、…

Docker安全开放远程访问连接权限

1、Docker完全开放远程访问 Docker服务完全开放对外访问权限操作如下&#xff1a; # 开启端口命令 &#xff08;--permanent永久生效&#xff0c;没有此参数重启后失效&#xff09; firewall-cmd --zonepublic --add-port2375/tcp --permanent # 重新载入 firewall-cmd --re…

2.Vue3中Cesium地图初始化及地图控件配置

前言 本文中&#xff0c;我们主要介绍 Cesium 在 Vue 3运行环境的配置&#xff0c;以及 Cesium 实例中控件的显隐设置&#xff0c;本文是后续文章内容的基础&#xff0c;项目代码在此查看&#xff1b;通过本文&#xff0c;我们可以得到一个纯净的 cesium 项目&#xff0c;后续的…

字符设备驱动开发(最初方式)

目录&#xff1a; 1.字符设备驱动简介2.字符设备驱动开发步骤2.1. 驱动模块的加载与卸载2.2. Makefile的编写2.3.字符设备的注册与注销2.3.1.设备号的组成2.3.2.设备号的分配 2.4.具体操作函数的实现2.4.1.进行打开和关闭操作2.4.2.对chrdev进行读写操作 3.具体程序的实现3.1.驱…

huggingface datasets map时出现KeyError: ‘output‘的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Spring MVC相关注解运用 —— 上篇

目录 一、Controller、RequestMapping 1.1 示例程序 1.2 测试结果 二、RequestParam 2.1 示例程序 2.2 测试结果 三、RequestHeader、CookieValue 3.1 示例程序 3.2 测试结果 四、SessionAttributes 4.1 示例程序 4.2 测试结果 五、ModelAttribute 5.1 示例程序 …

IDEA+springboot+mybatis+shiro+bootstrap+Mysql WMS仓库管理系统

IDEAspringbootmybatisshirobootstrapMysql WMS仓库管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.修改密码3.系统日志4. 登陆日志5. 库存查询6. 出入库记录7.货物入库8.货物出库9.仓库管理员管理10.供应商信息管理11.客户信息管理12.货物信息管理13. 仓库信息管…

Prometheus学习

Prometheus学习 promethueus exporter就是以 后台进程的方式运行在系统当中&#xff0c;不断去采集数据 1、红框框中是 prometheus基于数学算法输入的一个查询输入框 2.监控项的分类 3.数据采集的形式分类&#xff08;promethueus exporter就是以 后台进程的方式运行在系统当…

最新2023水果编曲软件FL Studio Producer Edition 21.0.3 Build 3517中文版下载安装激活图文教程

各位&#xff0c;大家好&#xff0c;今天兔八哥给大家带来最新最新2023水果编曲软件FL Studio Producer Edition 21.0.3 Build 3517中文版下载安装激活图文教程。我们一起先了解一些FL Studio 。FL Studio21是目前流行广泛使用人数最多音乐编曲宿主制作DAW软件&#xff0c;这款…

17.OpenCV中的GFTTDetector类

文章目录 GFTTDetector功能OpenCV中GFTTDetector类reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 这是使用imgproc.hpp中的goodFeaturesToTrack函数封装的类&#xff0c;其使用和goodFeaturesToTrack函数基本相似。 GFTTDetec…

Hyperledger Fabric测试网络的准备和基本使用

文章目录 相关安装启动测试网络创建channel打包链码安装链码包通过链码定义链码定义提交给通道调用链码关闭网络遇到的问题1.docker保持启动状态2.忘起测试网络了3.Java版本过高&#xff0c;推荐1.8 相关安装 npm、node、git、docker、docker-compose。docker保证一直运行 serv…

[Error] invalid preprocessing directive #inclued问题解决

错误代码 报错内容 [Error] invalid preprocessing directive #inclued 错误原因 #inclued写错了应该写成#include

flutter页面添加透明遮罩

路由工具 import package:test/main.dart; import package:flutter/material.dart;import circle_page_route.dart;class NavigatorUtil {static push(Widget page, {BuildContext context}) {return Navigator.push(context ?? navigatorKey.currentContext,MaterialPageRo…