C++多类型数组
C++ multiple type array
是否可以在C++中创建多个不同类型的有序元组的数组?例如,我希望能够制作一个元组数组,其中每个元组包含一个 int、一个字符串和一个双精度?所以像这样:
vector<pair<pair<int, string>, double> >;
有了这个,我可以有一个元组(2,"3",5.43)。这里的问题是,一般来说,我事先不知道元组的大小。因此,它可能只有两个元素,或五个元素,或示例中的三个元素和所有不同的类型。而且顺序也可能不同。是否可以在C++中做这样的事情,或者我将不得不切换到 Python?
数组是相同大小对象的系统排列。在 C/C++ 中,不能创建可变大小元素的数组。
但是,您可以使用多态性来实现此目的。
创建一个抽象类型指针数组,并根据其类型强制转换数组元素。
例:
namespace Array {
enum Type {
Type1T,
Type2T,
};
class AbstractType {
public:
virtual Type GetType() = 0;
virtual ~AbstractType() {}
};
class Type1 : public AbstractType {
public:
Type GetType() { return Type1T;}
int a;
string b;
double c;
};
class Type2 : public AbstractType {
public:
Type GetType() { return Type2T;}
int a;
string b;
string c;
double d; // whatever you want
};
}
然后创建多个不同类型的数组,如下所示:
vector<Array::AbstractType*> my_array;
c++
中的向量将具有相同类型的所有元素。另一种方法是具有 vector
s 的vector
,但同样,内部向量的元素必须是相同的类型。
解决的问题会比你试图实现的问题有更好的解决方案。有一个丑陋且绝对不明智的解决方案 - 使用vector<vector<void*> >
但这既危险又不可维护。
如果只有一组给定类型的元素,则创建一个抽象类型,该抽象类型具有所有类型的实现。例如,定义MyType
并在 MyTypeInt
、 MyTypeDouble
和 MyTypeString
中继承它。然后声明一个vector<vector<MyType*> >
,例如,(更好的是使用scoped_array或类似的东西而不是内部向量)。
编辑:根据Nijansen评论,如果boost可用,您可以创建Boost.Variant的向量。
所以我已经在研究这个名为 Nile 的仅标题项目。它以C++完成特定任务。https://github.com/LUCIF680/Nile
#include"nile.h"
Array y = {50,70.2,"ram"};
它还包含几个功能从推送,弹出等。目前它只支持int,long,double,long double,float,std::string,const char*
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '