2013-09-08 2 views
0

У меня есть вектор:Как использовать лямбда в векторе типа int?

std::vector<int> graphPred(tot_lines); 

, что я поставил на различные значения, но когда вход сделано, я хотел бы, чтобы исключить пустые ячейки я пробовал:

graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(), 
       [](const int graphPred){return graphPred.empty();}), 
      graphPred.end()); 

но компилятор жалуется, что " выражение должно быть типом класса " Есть ли проблема с моим синтаксисом или другим способом для достижения моей цели?

+2

Вы вызываете 'empty()' с объектом типа 'int'. – catscradle

+0

Являются ли пустые ячейки равными 0 или что-то еще? – 0x499602D2

+0

@ 0x499602D2 да они 0 – Napalidon

ответ

3

"да они 0"

Так используйте:

graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(), 
        [](const int x){return x==0;}), 
       graphPred.end()); 

Ваша функция лямбда

[](const int graphPred){return graphPred.empty();}

использует empty на int, что неправильно, функции-члены вызываются в классе, и это то, что ошибка al л около

+0

Спасибо, что сработало! – Napalidon

+2

@Napalidon 'std :: remove' также выполнит эту работу. С меньшим набором текста;) – catscradle

+0

@catscradle Но я слышал, что std :: remove действительно не удаляет элементы, и почему использование remove_if lambda лучше, это правда? – Napalidon

1

То, что вы написали, не имеет смысла: const int graphPred «тени» graphPred снаружи (которые не были бы захвачены в любом случае, потому что квадратные скобки пусты). Он вызывает empty на int, который вызывает ошибку, которую вы видите.

Кроме того, если graphPred - empty(), от него нечего стереть, поэтому вам нужно какое-то значащее логическое выражение в вашей лямбда.

Это должно работать - это будет стереть все четные числа из вектора:

graphPred.erase(
    std::remove_if(
     graphPred.begin() 
    , graphPred.end() 
    , [](const int n){return n % 2 == 0;} 
    ) 
, graphPred.end() 
); 

Вот demo on ideone.

+0

Спасибо, теперь я вижу, как использовать лямбда. – Napalidon

+0

Большое спасибо, что было действительно полезно. – Napalidon

0

Вы declear лямбда, как:

[](const int graphPred){return graphPred.empty();} 

Так graphPred является Int Const не класс. Вы не можете отправить graphPred.empty()