1

n 個のセルを割り当てている double へのポインターがあります。次に、このポインターの begin および end iterator オブジェクトにアクセスする必要があります。これが私のコードです:

*my_module.cpp*

# include c_vector.h
/* .. */

C_Vector a(n);

*c_vector.h*

class C_Vector{

/* .. */
public:
  C_Vector (int n);
  bool Create (int n);
private:
  int n_s;
  double *z;
}

*c_vector.cpp*

C_Vector::C_Vector(int n) {
   Create(n);
}
bool C_Vector::Create(int n) {

   if ( (z = (double *)malloc(n * sizeof(double))) != NULL ){
        n_s = n;
   }
}

モジュールファイルで、a.begin() にアクセスしたいと考えています。どうやってやるの?出来ますか?お知らせ下さい。

アビシェク

4

2 に答える 2

2

したがって、メンバー関数を記述beginendます。

typedef double * iterator;
iterator begin() {return z;}
iterator end()   {return z + n_s;}

オーバーロードを提供するのは礼儀正しいでしょうconst:

typedef double const * const_iterator;
const_iterator begin()  const {return z;}
const_iterator end()    const {return z + n_s;}
const_iterator cbegin() const {return begin();}
const_iterator cend()   const {return end();}

次に、ベクターの実装方法を学習したら、std::vector代わりに使用します。

于 2013-10-25T11:49:39.053 に答える
0

申し訳ありませんが、ここでポインターを使用することはお勧めしません。のように、含まれている動的に割り当てられた配列を使用する方が適していますstd::vectorbeginさらに、生のポインターにはandendメソッドがありません。

class C_Vector
{
public:
    // ...
private:
    std::vector<double> z;
// ^^^^^^^^^^^^^^^^^^^^^^^
};
于 2013-10-25T11:51:07.390 に答える