据我了解std::find_if() below
返回指向 arg
范围内第一个元素的迭代器第三个参数(lamda 函数)返回 true。那是对的吗?
有人能解释一下为什么没有像这样定义的迭代器吗 std::pair<std::string, std::type_index>::iterator = std::find_if(...)
?
std::find_if()
返回的迭代器在哪里?已存储,如何调用 ->second
靠自己而不是迭代器?
std::type_index argType(const std::string& name) const
{
return std::find_if(args_.begin(), args_.end(),
[&name](std::pair<std::string, std::type_index> arg)->bool
{
return arg.first == name;
}
)->second;
}
最佳答案
It is my understanding that
std::find_if()
below returns an iterator
是的,但是该迭代器随后在同一表达式中被取消引用。该函数返回 std::type_index
的拷贝来自 args_
的一些元素,这大概是一些带有 value_type
的类似 std 的容器的 std::pair<std::string, std::type_index>
(或类似)。
我猜这是一个 std::vector<std::pair<std::string, std::type_index>>
,因为如果它是一个 map ,整个功能可以简化为
return args_.at(name);
Could somebody explain why there isn't an iterator defined like this
std::pair<std::string, std::type_index>::iterator = std::find_if(...)
?
那么首先std::pair
没有成员(member)iterator
.我假设你的意思是 std::vector<std::pair<std::string, std::type_index>>::iterator
(或 args_
是哪个集合类型)。
不需要单独的语句来声明这样的迭代器,就像您不需要单独的 double
一样。在声明中
return floor(3.14 * radius);
当您需要整数周长计算时。
Where is the iterator returned by
std::find_if()
stored
编译器喜欢的任何地方。它仅在计算返回语句时存在。
how can you call
->second
on its own
你不是。您在 std::find_if
返回的临时文件上调用它
and why is there a
!= args_.end()
after the closing brace ofstd::find_if
?
没有。作者假设他们会找到匹配的元素。如果他们不这样做,则该程序具有未定义的行为。这可能是故意的,也可能是错误。
关于c++ - 在 std::pair 上使用 lambda 理解 std::find_if(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53524807/