C ++:从指向双精度数组的指针中获取Iterator

时间:2013-10-25 11:47:11

标签: c++ pointers iterator

我有一个指向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()。 我怎样才能做到这一点?可能吗? 请指教。

Avishek

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

抱歉,我不建议在这里使用指针;使用包含的,动态分配的数组(如std::vector)更合适。此外,原始指针没有beginend方法:

class C_Vector
{
public:
    // ...
private:
    std::vector<double> z;
// ^^^^^^^^^^^^^^^^^^^^^^^
};