gpt4 book ai didi

c++ - 我怎样才能像 C++ 中的数组一样实现支持不同类型元素的数据结构?

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:07 25 4
gpt4 key购买 nike

就像一个数组意味着这个数据结构支持在 O(1) 时间返回某个索引的元素。不同的类型意味着内置类型和用户定义的类都应该使用引用。

比如A就是把这个结构做下来的类。 b,c 是不同类的实例。并且A应该支持follow操作:

A a(10);//apply for storage of 10 elements

a[0]=120;

a[1]=’a’;

a[2]=”adsad”;

a[3]=b;

a[3]=c;

a[1]=c;

a[2]=123.5;


此题不做实战,纯属好奇

现在我知道如何解决这个问题了。真的很酷:D

最佳答案

你可以用 std::vector 来做到这一点或 std::arraystd::any .

点赞如下:

std::vector<std::any> many_any(10);
many_any[0] = 120;
many_any[1] = 'a';
many_any[2] = std::string("adsad");
many_any[3] = 123.5;

std::cout << std::any_cast<int>(many_any[0]) << std::endl;
std::cout << std::any_cast<char>(many_any[1]) << std::endl;
std::cout << std::any_cast<std::string>(many_any[2]) << std::endl;
std::cout << std::any_cast<double>(many_any[3]) << std::endl;

这段代码输出:

 120
a
adsad
123.5

这是一个 live-example .


std::any 是一个使用 type-erasure 的异构容器存储任何类型。它是 C++17 标准的一部分。这里有一系列文章解释了如何在 C++ 中实现类型删除:Type erasure — Part I .

重要说明:如果您确实需要 std::any,您应该非常仔细地考虑。因为它更像是一个“是的,我们可以!” 特性,它在纯粹的形式中很少有用。其他选项包括将对象存储在多态设置中:使用接口(interface)(也可以使用类型删除来实现)或变体+访问者。

更新:如果您的编译器不支持 C++17,您可以查看 Boost's any implementation .

关于c++ - 我怎样才能像 C++ 中的数组一样实现支持不同类型元素的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com