在C++中是否可以创建一个由不同类型的多个有序元组组成的数组?例如,我想能够使一个元组数组,其中每个元组包含一个int,一个字符串和一个double?比如说
vector<pair<pair<int, string>, double> >;
有了这个,我可以有一个元组(2,"3",5.43)。这里的问题是,通常我不知道元组的大小。因此,它可能只有两个元素,或五个元素,或三个元素,如示例中所示,以及所有不同的类型。顺序也可以不同。有没有可能在C++中做这样的事情,或者我必须切换到Python?
hwazgwia1#
数组是相同大小的物体的系统排列。在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;
e4yzc0pl2#
c++中的向量将使其所有元素具有相同的类型。另一种方法是vector的vector s,但同样,内部向量的元素必须是相同的类型。也许你试图解决的问题会有一个比你试图实现的更好的解决方案。有一个丑陋且绝对不可取的解决方案-使用vector<vector<void*> >,但这既危险又不可维护。如果你只需要一组给定类型的元素,那么创建一个抽象类型,它有一个所有类型的实现。例如,定义MyType并在MyTypeInt、MyTypeDouble和MyTypeString中继承它。然后声明一个vector<vector<MyType*> >,例如,(更好的是使用scoped_array或类似的东西来代替内部向量)。编辑:根据nijansen的评论,如果boost可用,您可以创建Boost. Variant的vector的vector。
c++
vector
vector<vector<void*> >
MyType
MyTypeInt
MyTypeDouble
MyTypeString
vector<vector<MyType*> >
8mmmxcuj3#
因此,我已经在这个标题只有项目称为尼罗河工作。它在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 *
3条答案
按热度按时间hwazgwia1#
数组是相同大小的物体的系统排列。在C/C++中,你不能创建一个可变大小的元素数组。
但是,您可以使用多态性来实现这一点。
创建一个抽象类型指针数组,并根据其类型强制转换数组元素。
示例:
然后创建多个不同类型的数组:
e4yzc0pl2#
c++
中的向量将使其所有元素具有相同的类型。另一种方法是vector
的vector
s,但同样,内部向量的元素必须是相同的类型。也许你试图解决的问题会有一个比你试图实现的更好的解决方案。有一个丑陋且绝对不可取的解决方案-使用
vector<vector<void*> >
,但这既危险又不可维护。如果你只需要一组给定类型的元素,那么创建一个抽象类型,它有一个所有类型的实现。例如,定义
MyType
并在MyTypeInt
、MyTypeDouble
和MyTypeString
中继承它。然后声明一个vector<vector<MyType*> >
,例如,(更好的是使用scoped_array或类似的东西来代替内部向量)。编辑:根据nijansen的评论,如果boost可用,您可以创建Boost. Variant的vector的vector。
8mmmxcuj3#
因此,我已经在这个标题只有项目称为尼罗河工作。它在C++中执行特定的任务。https://github.com/LUCIF680/Nile
它还包含了几个功能,从推,弹出等.目前它只支持int,long,double,long double,float,std::string,const char *