c++ - vector 的 vector 和自定义类之间的区别

标签 c++ vector matrix

我想知道使用 vector 的 vector 来表示 2D 矩阵或创建类时(任何类型的)有什么区别:

template < class T > 
class Matrix2D {
public:
    Matrix2D( unsigned m, unsigned n ) : m( m ), n( n ), x( m * n ) {} ;
    Matrix2D( const Matrix2D<T> &matrix ) : m( matrix.m ), n( matrix.n) x( matrix.x ) {} ;
    Matrix2D& operator= ( const Matrix2D<T> &matrix ) ;
    T& operator ()( unsigned i, unsigned j ) ;
    void resize( int nx, int ny ) ;
private:
    unsigned m, n ;
    std::vector< T > x ;         
} ;


template <class T>
T& Matrix2D<T>::operator ()( unsigned i, unsigned j ) {
    return x[ j + n * i ] ;
}

template <class T>
Matrix2D<T>& Matrix2D<T>::operator= ( const Matrix2D<T> &matrix ) {
    m = matrix.m ;
    n = matrix.n ;
    x = matrix.x ;
    return *this ;
}

template <class T>
void Matrix2D<T>::resize( int nx, int ny ) {
    m = nx ;
    n = ny ;
    x.resize( nx * ny ) ;
}

编辑:忽略 resize 方法,因为 Erik 指出它不会保留原始数据位置。我只添加了我不介意的特定任务。基本类只是构造函数和 () 运算符。

最佳答案

  • - .resize() 不会将现有数据保留在原始位置。
  • - 语法差异,operator()operator[]
  • - 没有迭代器,也没有使用例如std:: 算法
  • + 更好的局部性,支持 vector 具有连续内存
  • + 更易于理解的初始化语法
  • + 保证数组没有锯齿

简而言之,该类很好,并且可能更适合用于特殊用途,但它在通用用途上表现不佳。

关于c++ - vector 的 vector 和自定义类之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289609/

相关文章:

c++ - 什么是复制省略和返回值优化?

r - 在三维空间中为矢量设置动画

matrix - Transform::linear() 在 Eigen 库中返回什么?

r - model.matrix 生成的行数比原始 data.frame 少

c++ - 不完整类型 : class usage before definition vs. 前向声明

c++ - 仅在模板中专门构造函数,保持最佳性能和整洁的界面

c++ - C/C++(还有其他语言吗?)有条件提前返回良好代码实践

c++ - 本地 C++ vector 的内存分配在哪里?

c++ - 如何将 vector 传递给函数?

java - 四分区矩阵搜索