2016-05-25 2 views
-2

EDIT: К сожалению, я не дал никаких результатов. Я ожидал удалить (10, 11), затем (20, 21), затем (30, 31) и т. Д., Но вместо этого получаю это http://imgur.com/TbVmLo4Удаление определенных кусков из std :: vector с использованием функции лямбда

У меня есть вектор, составленный несколькими векторами того же размер и я хочу избавиться от части их конца, используя удалить, если и лямбда-функция, но, похоже, смещение при удалении. Вот код, который я бегу:

#include <vector> 
#include <numeric> 
#include <iostream> 
#include <algorithm> 
#include <cctype> 
#include <cmath> 
#include <typeinfo> 


int main() 
{ 
    int sizeOfSpectrum=10; 
    int desiredSizeOfSpectrum=8; 
    int count=-1; 
    std::vector<int> v(100); 
    std::iota (std::begin(v), std::end(v), 0); 
    auto newend=std::remove_if(v.begin(),v.end(),[&](int i)->bool{ 
        count++; 
        int temp=count%sizeOfSpectrum; 
        bool test=(temp) > desiredSizeOfSpectrum; 
        return (test); 
       }); 
    v.erase(newend, v.end()); 
    std::cout << "\n"; 
    std::cout << "v[i]: \n"; 
    for(int i : v)std::cout <<v[i]<<": "; 
    std::cout << "\n"; 
    return 0; 
} 
+0

Каков ожидаемый результат и что вы получаете? о каком количестве перемещений мы говорим здесь? –

+0

Предположим, у меня есть вектор размером 100, составленный наборами данных размером 10 (так 10 наборов). Я хочу удалить 9-й и 10-й элементы каждого набора. Но, как вы видите, он удаляет 10-й и 11-й, а затем 10-й и 22-й, а не 20-й и 21-й, как я и ожидал, я не знаю, что здесь происходит. http://imgur.com/TbVmLo4 – JSalaun

+0

А что происходит вместо этого? Какой вывод вы распечатываете? –

ответ

2

Проблема заключается в этой строке:

for(int i : v)std::cout <<v[i]<<": "; 

Когда проходит эта линия, i дается ценность содержание каждого элемента из вектор. Вы рассматриваете это как индекс в вектор, а не значение.

Вместо этого используйте:

for(int i : v) 
    std::cout <<i<<": "; 

Примечание: вы все еще не получите достаточно выход вы после, но это должно дать вам достаточно, чтобы решить это для себя.

+0

Большое спасибо, я не ожидал, что проблема будет от функции печати вообще. – JSalaun

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