我想要返回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;
谢谢。
答案 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);