2013-10-25 3 views
1

У меня есть указатель на двойное число, на которое я выделяю n ячеек. Теперь мне нужно открыть начальные и конечные объекты итератора этого указателя. Вот мой код:C++: получить 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(). Как я могу это сделать? Является ли это возможным? Просьба сообщить.

Avishek

+0

Вы не означает 'z.begin()'? – 0x499602D2

+0

вы можете использовать * z, чтобы получить первый элемент и * (z + n), чтобы получить n-й элемент. – kunal

+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.

+0

Мне нужен объект Iterator для использования алгоритмов. –

+0

@AvishekDutta: Указатели могут использоваться как итераторы. –

+0

Я делал векторы ... но вы знаете ... боссы! –

0

Извините, но я бы не рекомендовал использовать указатель здесь; это более подходит для использования содержащегося динамически распределенного массива, такого как std::vector. Кроме того, сырые указатели не имеют begin и end метод:

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

@ 0x499602D2 & Майк: Почувствуй мое несчастье! Я использую базу с открытым исходным кодом, типы все определены там, и я должен использовать их типы. –

Смежные вопросы