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;
}
Каков ожидаемый результат и что вы получаете? о каком количестве перемещений мы говорим здесь? –
Предположим, у меня есть вектор размером 100, составленный наборами данных размером 10 (так 10 наборов). Я хочу удалить 9-й и 10-й элементы каждого набора. Но, как вы видите, он удаляет 10-й и 11-й, а затем 10-й и 22-й, а не 20-й и 21-й, как я и ожидал, я не знаю, что здесь происходит. http://imgur.com/TbVmLo4 – JSalaun
А что происходит вместо этого? Какой вывод вы распечатываете? –