怎么在C++中用Vector存放不同类型的数据..
比如需要定义一个vector<>类型的容器value需要实现value.pushback(1);value.pushback("type");能实现这种效果吗?能不用bo...
比如需要定义一个vector<>类型的容器 value
需要实现
value.pushback(1);
value.pushback("type");
能实现这种效果吗? 能不用boost.any来实现么... 展开
需要实现
value.pushback(1);
value.pushback("type");
能实现这种效果吗? 能不用boost.any来实现么... 展开
2个回答
展开全部
namespace std {
template<class T,class A = allocator<T> > struct vector {
typedef typename A::value_type value_type;
typedef typename A::reference reference;
typedef A allocator_type;
typedef typename A::pointer pointer;
typedef typename A::size_type size_type;
// ...
explicit vector() throw() : sz(0), random_ptr() { }
// ...
void push_back(const value_type& v) {
!random_ptr ? random_ptr = new T(v): new(random_ptr+sz) T(v);
sz++;
}
reference operator[](size_type ind) { return *(random_ptr+ind); }
size_type size() const { return sz; }
// ...
private:
size_type sz;
pointer random_ptr;
};
}
在此我并没有考虑到push_back()牵涉到的reserve(),只是大致上如此。如果你要想这段代码能在main()下运行,请定义一个合适的析构函数。
template<class T,class A = allocator<T> > struct vector {
typedef typename A::value_type value_type;
typedef typename A::reference reference;
typedef A allocator_type;
typedef typename A::pointer pointer;
typedef typename A::size_type size_type;
// ...
explicit vector() throw() : sz(0), random_ptr() { }
// ...
void push_back(const value_type& v) {
!random_ptr ? random_ptr = new T(v): new(random_ptr+sz) T(v);
sz++;
}
reference operator[](size_type ind) { return *(random_ptr+ind); }
size_type size() const { return sz; }
// ...
private:
size_type sz;
pointer random_ptr;
};
}
在此我并没有考虑到push_back()牵涉到的reserve(),只是大致上如此。如果你要想这段代码能在main()下运行,请定义一个合适的析构函数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vector<anything_t *>
其中
typedef struct taganything
{
void *data;
int length;
} anything_t;
boost.any我不懂。
其中
typedef struct taganything
{
void *data;
int length;
} anything_t;
boost.any我不懂。
追问
谢谢你
但是用了你提供的方法
在使用push_back的时候会发生错误..string无法转化为anything_t
追答
string不是放在anything_t的,string要放在anything_t->data中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询