std::variant介绍:en.cppreference.com/w/cpp/utility/variant

通过泛型模板(仅提供了int, double, string三种类型的存储),实现了append, pop, front, back, size等方法,并且通过重载运算符实现了对负数索引的访问。

#include <iostream>
#include <vector>
#include <variant>
#include <string> class PythonList {
public:
template <class T>
void append(const T& item) {
v.push_back(item);
} void pop() {
v.pop_back();
} template <class T>
T& front() const {
return std::get<T>(v.front());
} template <class T>
T& back() const {
return std::get<T>(v.back());
} std::size_t size() const {
return v.size();
} std::variant<int, double, std::string> operator[] (int index) const {
if (index >= 0)
return v[index];
std::size_t n{v.size()};
return v[n + index];
} private:
std::vector<std::variant<int, double, std::string>> v;
}; int main() {
PythonList lst;
lst.append(1);
lst.append(3.14);
lst.append("Hello World"); int n = lst.size();
for (int i{}; i < n; ++i) {
if (std::holds_alternative<int>(lst[i]))
std::cout << "Type: int\n";
else if (std::holds_alternative<double>(lst[i]))
std::cout << "Type: double\n";
else if (std::holds_alternative<std::string>(lst[i]))
std::cout << "Type: string\n";
} for (int i{-1}; i >= -3; --i) {
if (std::holds_alternative<int>(lst[i]))
std::cout << "Type: int\n";
else if (std::holds_alternative<double>(lst[i]))
std::cout << "Type: double\n";
else if (std::holds_alternative<std::string>(lst[i]))
std::cout << "Type: string\n";
}
}

如果不用variant,也可以通过union来实现不同类型的存储,variant可以视作为现代C++的union,并且能实现自动析构。

用现代C++写一个python的简易型list的更多相关文章

  1. 写一个python的服务监控程序

    写一个python的服务监控程序 前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4. 到python网站下载源代码,解压到Redhat上, ...

  2. 如何手动写一个Python脚本自动爬取Bilibili小视频

    如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...

  3. 写一个python脚本监控在linux中的进程

    在虚拟机中安装Linux中的CentOS7系统 https://baijiahao.baidu.com/s?id=1597320700700593557&wfr=spider&for= ...

  4. 写一个Python的windows服务

    1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 ...

  5. 写一个Python 1、通过select实现的最简单的web框架2、通过wsgiref实现的web框架

    #!/usr/bin/env python # -*- coding: utf- -*- import socket import select class MyRequest: "&quo ...

  6. 写一个python 爬虫爬取百度电影并存入mysql中

    目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...

  7. 如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰

    Python中的装饰器,可以有参数,可以有返回值,那么如何能让这个装饰器既可以装饰没有参数没有返回值的方法,又可以装饰有返回值或者有参数的方法呢?有一种万能装饰器,代码如下: def decorate ...

  8. 写一个python小程序

    在windows环境下进行操作 window+R 输入cmd  创建一个文件夹 mkdir pytxt 创建一个py文件 py.py  用notepad或者记事本等工具进行编辑 或 首先声明pytho ...

  9. 手写一个python迭代器

    分析 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器. 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法. 在一个类的实例对象想要变成迭代器,就 ...

  10. 请写一个python逻辑,计算一个文件中的大写字母数量

    import os os.chdir(r'C:\Users\Administrator\Desktop')#os.chdir切换到指定目录 with open('a.txt') as today: c ...

随机推荐

  1. 【PAT】1001 害死人不偿命的(3n+1)猜想(动态更新)

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 年的世界 ...

  2. auto main()-> int的含义是什么?

    42 https://stackoverflow.com/questions/21085446/what-is-the-meaning-of-auto-main-int/21085530   C++1 ...

  3. 使用MASA Stack+.Net 从零开始搭建IoT平台 第五章 使用时序库存储上行数据

    @ 目录 前言 分析 实施步骤 时序库的安装 解决playload没有时间戳问题 代码编写 测试 总结 前言 我们可以将设备上行数据存储到关系型数据库中,我们需要两张带有时间戳的表(最新数据表 和 历 ...

  4. 统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序

    前言   在ubuntu上发布qt程序相对还好,使用脚本,但是在统信UOS麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdep ...

  5. AI作画本地搭建

    前言 Novel AI (简称NAI)是一个线上的深度学习小说续写平台,而 NAI Diffusion 是 NAI 在2022年10月3日推出的基于 Stable Diffusion 算法的自动生成二 ...

  6. 3D降噪_运动估计块运动匹配

    运动估计 运动估计是视频去噪技术的重要组成之一,计算相邻两帧视频序列各像素的相对运动偏移量,从而得到其运动轨迹. 点 ( i , j ) (i,j) (i,j)和 ( x , y ) (x,y) (x ...

  7. Windows安装SSH服务器

    1.打开Win的设置并在设置中找到应用 2.在应用中依次选择应用和功能 可选功能 3.在可选功能中选择添加功能 (OpenSSH客户端默认已存在) 选中OpenSSH服务器后点击下方的安装 4.快捷键 ...

  8. quarkus实战之四:远程热部署

    将本地的改动极速同步到远程服务端,并自动生效,掌握此技能,开发调试会更高效 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/ ...

  9. <学习笔记> 关于二项式反演

    1 容斥原理的式子: \[|A1∪A2∪...∪An|=\sum_{1≤i≤n}|Ai|−\sum_{1≤i<j≤n}|Ai∩Aj|+...+(−1)^{n−1}×|A1∩A2∩...∩An| ...

  10. Unity Shader编辑器工具类ShaderUtil 常用函数和用法

    Unity Shader编辑器工具类ShaderUtil 常用函数和用法 Unity的Shader编辑器工具类ShaderUtil提供了一系列函数,用于编译.导入和管理着色器.本文将介绍ShaderU ...