Russian Qt Forum
Ноябрь 23, 2024, 20:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу добраться до итератора в шаблонном векторе std::vector<T>  (Прочитано 4025 раз)
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 с итераторами? Как подружить класс обертку с итераторами?

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


Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 24, 2011, 19:12 »

Ну как бы "это 2 разных T" Улыбающийся Но зачем Вам так делать? Ведь чтобы позвать такой erase нужно будет указать тип итератора - теряется весь смысл/общность template. Лучше по индексу

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

Записан
enumerator
Гость
« Ответ #2 : Октябрь 24, 2011, 20:08 »

Если я не ошибаюсь, то так:
Код:
void erase( typename std::vector<T>::iterator it )
Записан
nvrrus
Гость
« Ответ #3 : Октябрь 27, 2011, 17:20 »

Спасибо большое, уважаемые Igors и enumerator. Оба фрагмента рабочие.

Только я избавился от использования итераторов.
Там где они нужны использую std::vector, вытаскивая его из прослойки.
Записан
KrupaKarlo
Гость
« Ответ #4 : Декабрь 22, 2011, 13:44 »

Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, может кто сталкивался с такой проблемой.

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

Простите можно узнать зачем. QVector совместим с std::vector юзайте его. Есть еще бустовский вариант зачем велосипед?
Записан
Tonal
Гость
« Ответ #5 : Декабрь 23, 2011, 08:24 »

Если я не ошибаюсь, то так:
Код:
void erase( typename std::vector<T>::iterator it )
Ну и было бы правильно этот std::vector<T>::iterator затайпдефить в публичной части класса.
Иначе как-то не совсем очевидно получается. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 23.