1

我有一个指向 double 的指针,我正在为其分配 n 个单元格。现在我需要访问这个指针的开始和结束迭代器对象。这是我的代码:

*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::vector. 此外,原始指针没有beginandend方法:

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