我有一个漂浮的矢量,如:
vector<float> v = [0.4 0.2 0.8 0.1 0.5 0.6];
我想创建一个新的向量(称之为目标):
vector<float> target;
仅包含大于0.5的元素。我从this post
尝试了这一行copy_if(v.begin(), v.end(), back_inserter(target), bind(less<float>(), 0.5, placeholders::_1));
但是当我尝试打印出目标中的元素时,我总是获得n次的第一个元素(v中的n个元素大于0.5)。
以这种方式完成打印:
for (auto i = target.begin(); i != target.end(); ++i) {
cout << target[*i] << endl;
}
提前致谢。
答案 0 :(得分:6)
在输出中,i
是一个迭代器。 target[*i]
会在等于i
位置元素的位置打印元素。由于您的值都小于1且大于0,*i
始终等于0.这会导致将元素打印为位置0,其次数等于向量中的元素数。
请尝试以下方法:
for (auto i = target.begin(); i != target.end(); ++i) {
cout << *i << endl;
}
或者简单地说:
for (auto i : target) {
cout << i << endl;
}
答案 1 :(得分:2)
您可以使用lambda轻松完成
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<float> v {0.4,0.2,0.8,0.1,0.5,0.6};
vector<float> target;
copy_if(v.begin(), v.end(), back_inserter(target),[](float n ){ return n > 0.5;});
for (auto i = target.begin(); i != target.end(); i++) {
cout << *i << endl;
}
}
输出
0.8
0.6