我有一个由几个相同大小的矢量组成的矢量,我想使用删除if 和 lambda函数来摆脱它们的一部分,但似乎在移除中是一个位移。这是我正在运行的代码:
#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 :(得分:2)
问题出在这一行:
for(int i : v)std::cout <<v[i]<<": ";
当此行运行时,i
将获得向量的每个元素的内容的值。您将此作为索引处理为向量,而不是值。
改为使用:
for(int i : v)
std::cout <<i<<": ";
注意:你仍然不会得到你想要的输出,但这应该足以让你自己解决这个问题。