gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:02 25 4
gpt4 key购买 nike

我想知道使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com