将容器类的每个元素存储为对象

最近,我看到了一些用C ++实现的Matrix和1D数组类,其中每个单独的元素都包装为一个类(例如Element类)。通常,我们喜欢让Matrix之类的容器在内存中包含连续的实际元素(例如int)。对单个元素使用自定义类可以给您一些灵活性,但是可能的缺点是什么? 为了简短起见,请参见伪代码:
// 1st approach: Elements stored in their type.
template <class T>
class Matrix 
{
    T *m_data;
    //..
};

// 2nd approach: Elements wrapped into a class
template<class T>
class Matrix
{
    std::set<Element<T> > m_data; // or using std::vector<Element<T> > m_data
    //..
}; // Element is a class representing single element of type T
第二种方法可能意味着什么,特别是如果我们需要对大量数据使用矩阵时?另外,是否需要在GPU编程中使用这种类型(来回传输到设备内存)?     
已邀请:
一个缺点是每个元素的内存成本,这可能是大型集合中的性能问题。它将花费您至少一个字节,填充可能会更多。 \“ sizeof \”运算符应该告诉您费用。     
如果该类没有虚函数,则可能会将它们** 1或
std::vector<Element> v(20)
放置在连续的内存中。如上所述,std :: set和大多数其他STL容器不一定是连续的。 *之所以说“可能”,是因为根据实际类型的大小,编译器可能会插入一些填充,您可以根据需要使用#pragmas进行控制。     

要回复问题请先登录注册