获取大于值c ++的所有向量元素

时间:2017-09-07 14:02:08

标签: c++ vector

我有一个漂浮的矢量,如:

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;
}

提前致谢。

2 个答案:

答案 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

DEMO