'станд.:: вектор <T>:: итератор это'; не компилирует

У меня есть эта функция:

    template<typename T>
    void Inventory::insertItem(std::vector<T>& v, const T& x)
    {
        std::vector<T>::iterator it; // doesn't compile
        for(it=v.begin(); it<v.end(); ++it)
        {
            if(x <= *it) // if the insertee is alphabetically less than this index
            {
                v.insert(it, x);
            }
        }
    }

и g ++ дает эти ошибки:

src/Item.hpp: In member function ‘void
yarl::item::Inventory::insertItem(std::vector<T, std::allocator<_CharT> >&, const T&)’:  
src/Item.hpp:186: error: expected ‘;’ before ‘it’  
src/Item.hpp:187: error: ‘it’ was not declared in this scope

это должно быть что-то простое, но после десяти минут того, чтобы уставиться на него я не могу найти ничто плохого. Кто-либо еще видит его?

16
задан Max 29 June 2010 в 20:49
поделиться

2 ответа

Попробуйте вместо этого:

typename std::vector<T>::iterator it;

Вот страница, которая описывает , как использовать typename и почему это необходимо здесь.

31
ответ дан 30 November 2019 в 16:30
поделиться

То, что вы делаете, неэффективно. Вместо этого используйте бинарный поиск:

#include <algorithm>

template <typename T>
void insertItem(std::vector<T>& v, const T& x)
{
    v.insert(std::upper_bound(v.begin(), v.end(), x), x);
}
8
ответ дан 30 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: