C++中list放入 char int double string类型数据

2025-02-25 17:39:38
推荐回答(5个)
回答1:

如果只包含简单数据类型,可以用union,包含了string类型,只能自己封装了,可参考如下方法:

#include
#include
#include
using namespace std;

union Mydata{
    char data;
    int  data2;
    double data3;
};

class UnionData{
public:
    UnionData(int data):intData(data),datatype(1) {}
    UnionData(char data):charData(data),datatype(2) {}
    UnionData(double data):dData(data),datatype(3) {}
    UnionData(string data):strData(data),datatype(4) {}
    UnionData(char *data):strData(data),datatype(4) {}
private:
    int intData;
    char charData;
    double dData;
    string strData;

    int datatype;
};

void mian()
{
    //list mylist;
    list mylist;
    mylist.push_back(23);
    mylist.push_back('c');
    mylist.push_back(34.5);
    mylist.push_back("Hello world");
}

回答2:

你是想把不同的类型放入同一个list的对象?那除了自己写个list类,没其他办法。因为每个list里的元素长度在声明就固定了,所以迭代器才能正常使用

如果你是指用T代表同一种类型,那可以用类模板

回答3:

class data_type{
public:
data_type(const char &r):iv(r){
mtype=_type::CHAR;
}
data_type(const int &r):iv(r){
mtype=_type::INT;
}
data_type(const string &r):sv(r){
mtype=_type::STRING;
}
data_type(const double &r):dv(r){
mtype=_type::DOUBLE;
}
//其它函数
private:
int iv;
double dv;
string sv;
enum _type{CHAR=0,INT,DOUBLE,STRING};
_type mtype;
};
//自己写一个类似联合的类 允许你所要的类型到该类的默认转换 和其它操作函数 也可以用系统默认的联合 只是你不知哪是哪而已

回答4:

typedef std::list any_val_list_type;
any_val_list_type lst;

你想放什么都可以,不过取的时候自己做些处理
any_cast用起来要有技巧的,不然代码就很土

回答5:

list ilist;
list clist;
list slist;

ilist.push_back(55);
clist.push_back('a');
slist.push_back("good boy");

可以参考下C++ Primer,里面很多例子,网上也有电子版下载。(建议买正版)