据我了解,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;
}
答案 0 :(得分:2)
据我了解,下面的
std::find_if()
返回一个迭代器
是的,但是该迭代器随后在同一表达式中被取消引用。该函数从std::type_index
的某个元素返回args_
的副本,该元素可能是一些类似std的容器,其value_type
为std::pair<std::string, std::type_index>
(或类似)。
猜测是std::vector<std::pair<std::string, std::type_index>>
,因为如果它是一个映射,则整个函数可以简化为
return args_.at(name);
有人可以解释为什么没有定义
std::pair<std::string, std::type_index>::iterator = std::find_if(...)
这样的迭代器吗?
首先,std::pair
没有成员iterator
。我假设您的意思是std::vector<std::pair<std::string, std::type_index>>::iterator
(或任何集合类型args_
)。
不需要像声明中不需要单独的double
一样的方式来声明这种迭代器的单独声明
return floor(3.14 * radius);
当您需要整数周长计算时。
std::find_if()
返回的迭代器存储在哪里
编译器喜欢的任何地方。它仅在评估return语句时存在。
如何单独呼叫
->second
不是。您正在std::find_if
为什么在
!= args_.end()
的大括号后面有std::find_if
?
没有。作者假设,他们将找到一个匹配的元素。如果没有,则程序具有未定义的行为。这可能是故意的,也可能是错误。