2015-02-28 6 views
0

Я осмотрелся, и мне кажется, что консенсусным ответом на эту проблему является этот метод;C++ Удалить элемент из вектора по значению

template <typename T> 
void removeByValue(vector<T> & vec, const T & val) 
{ 
    vec.erase(std::remove(vec.begin(), vec.end(), val), vec.end()); 
} 

Однако при попытке скомпилировать его, я получаю сообщение об ошибке error C2660: 'remove' : function does not take 3 arguments. Почему это дает мне эту ошибку?

+1

никаких ошибок на vs2013. – Jichao

+0

Я использую визуальную студию 2013. – Maurdekye

+0

Возможный дубликат [C++ STL remove error] (http://stackoverflow.com/questions/8394393/c-stl-remove-error) –

ответ

2

std::remove доступен только в том случае, если вы включаете заголовок <algorithm>.

Это ясно указано the MSDN documentation here, а также любые ссылки на C++.

+0

Спасибо! Почему ни один из других ответов не упоминает об этом? – Maurdekye

+1

@Maurdekye: Поскольку поиск документации по любой встроенной функции для выяснения того, какие заголовки требуются, является настолько базовым, что большинство программистов на С ++ никогда не считают, что ученики еще не узнали об этом. –

+0

Ошибка, которую он бросил для меня, был не то, что она была неопределенной, а скорее определена, но приняла другое количество аргументов. Таким образом, было бы легко ошибиться в качестве стандартного метода. – Maurdekye

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