我有一个指向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
答案 0 :(得分:2)
所以写begin
和end
成员函数:
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
)更合适。此外,原始指针没有begin
和end
方法:
class C_Vector
{
public:
// ...
private:
std::vector<double> z;
// ^^^^^^^^^^^^^^^^^^^^^^^
};