给出一个向量
vector<classX *> myVec;
如何返回其中一个元素的索引i
,如下面的函数所示;
size_t nearestElement(classY const& p){
size_t i(0);
double d = distance(myVec[i]->position(), p);
for (auto const& element : myVec){
if(distance(element->position(), p) < d){
i = ???; // the index of the current element
}
return i;
}
}
其中position()
是classX
中定义的函数,而distance
不是std::distance
函数,而是我定义自己的函数。
答案 0 :(得分:2)
根据常规更改范围,或将索引变量添加到当前的:
int index = 0;
for (auto const& element : myVec){
if(distance(element->position(), p) < d){
i = index; // the index of the current element
}
index++
...
答案 1 :(得分:1)
&element - &myVec[0]
应该为具有连续数据的容器(如std::vector
)执行操作。
如果您的distance
功能很便宜,您可以像这样重写您的功能:
size_t nearestElement(classY const& p)
{
auto it = std::min_element(myVec.begin(), myVec.end(),
[&p](const classX* lhs, const classX* rhs) {
return distance(lhs->position(), p) < distance(rhs->position(), p);
});
return it - myVec.begin(); // Will return 0 if myVec is empty.
}