c ++ find_if struct中的一个元素只返回第一个元素

时间:2018-01-19 01:28:03

标签: c++

我想要返回struct中包含a=5的元素。但是,它无法使用find_if找到它。 (*it).a返回的值始终是第一个元素0.下面是代码。

struct vect_map {
    int a;
    int b;
};
int main () {

    int iteration = 20000;
    vector< vect_map > vect;
    vect.reserve( iteration );
    for( auto i=0; i<iteration; ++i) {
        if( i==iteration-200 ) {
            vect[i].a = 5; 
            vect[i].b = 100;
        }
        else {
            vect[i].a = i; 
            vect[i].b = 1;
        }
    }
    int n=5;
    auto it = find_if( begin( vect ), end( vect ), [&n] (const vect_map &e) { return e.a==n; } );
    if( it!=vect.end() ) {
        cout << (*it).a << endl;
    }
    return 0;

谢谢。

2 个答案:

答案 0 :(得分:3)

vect[i]有未定义的行为,因为i不小于vect.size()

您需要为矢量指定正确的大小:

vect.resize(iteration);

答案 1 :(得分:3)

问题是填充vector的循环不正确:reserve(n)不会创建所需长度的向量,只允许push_back而不重新分配到指定的长度限制。

您可以通过按原样推回所需元素或使用适当的构造函数创建2000个项目数组来解决此问题:

const int iteration = 20000;
vector< vect_map > vect(iteration);

Demo