Russian Qt Forum

Программирование => С/C++ => Тема начата: nvrrus от Октябрь 24, 2011, 17:37



Название: Не могу добраться до итератора в шаблонном векторе std::vector<T>
Отправлено: nvrrus от Октябрь 24, 2011, 17:37
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, может кто сталкивался с такой проблемой.

Пишу обертку над std::vector в QT так:

Код:
template<typename T >
class EXPLIB C_VectorW : public C_Serialization
{
private:
std::vector<T> m_vec;

public:
    C_VectorW() { }
    C_VectorW(const vector<T>& Vec) { m_vec = Vec;  }
    C_VectorW(const C_VectorW<T>& Vec) { m_vec = Vec.m_vec; }
    virtual ~C_VectorW() {}

    unsigned int size() const { return m_vec.size(); }
    void clear() { m_vec.clear(); }
    void push_back(const T& data) { m_vec.push_back(data); }
    void erase(std::vector<T>::iterator it)
    {

    }
};

Пытаюсь реализовать метод erase, связав его с итератором на std::vector<T>
Ругается - 'std::vector<T>::iterator' - is not a type

Что сделать, чтобы реализовать функцию erase с итераторами? Как подружить класс обертку с итераторами?

Заранее большое спасибо!




Название: Re: Не могу добраться до итератора в шаблонном векторе std::vector<T>
Отправлено: Igors от Октябрь 24, 2011, 19:12
Ну как бы "это 2 разных T" :) Но зачем Вам так делать? Ведь чтобы позвать такой erase нужно будет указать тип итератора - теряется весь смысл/общность template. Лучше по индексу

Код
C++ (Qt)
void erase( size_t index )
{
m_vec.erase(m_vec.begin() + index);
}
 
   



Название: Re: Не могу добраться до итератора в шаблонном векторе std::vector<T>
Отправлено: enumerator от Октябрь 24, 2011, 20:08
Если я не ошибаюсь, то так:
Код:
void erase( typename std::vector<T>::iterator it )


Название: Re: Не могу добраться до итератора в шаблонном векторе std::vector<T>
Отправлено: nvrrus от Октябрь 27, 2011, 17:20
Спасибо большое, уважаемые Igors и enumerator. Оба фрагмента рабочие.

Только я избавился от использования итераторов.
Там где они нужны использую std::vector, вытаскивая его из прослойки.


Название: Re: Не могу добраться до итератора в шаблонном векторе std::vector<T>
Отправлено: KrupaKarlo от Декабрь 22, 2011, 13:44
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, может кто сталкивался с такой проблемой.

Пишу обертку над std::vector в QT так:

Простите можно узнать зачем. QVector совместим с std::vector юзайте его. Есть еще бустовский вариант зачем велосипед?


Название: Re: Не могу добраться до итератора в шаблонном векторе std::vector<T>
Отправлено: Tonal от Декабрь 23, 2011, 08:24
Если я не ошибаюсь, то так:
Код:
void erase( typename std::vector<T>::iterator it )
Ну и было бы правильно этот std::vector<T>::iterator затайпдефить в публичной части класса.
Иначе как-то не совсем очевидно получается. :)