理解 std::find_if() 在 std::pair 上使用 lambda
understanding std::find_if() using a lamda on std::pair
据我了解,std::find_if() below
returns 指向 arg
范围内第一个元素的迭代器,其中第三个参数(lamda 函数) returns 为真.那是对的吗?
有人可以解释为什么没有这样定义的迭代器吗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
是的,但是该迭代器随后在同一表达式中被取消引用。函数 return 是来自 args_
的某个元素的 std::type_index
的 copy,这大概是一些带有 [=15= 的类似 std 的容器] 的 std::pair<std::string, std::type_index>
(或类似)。
猜测是 std::vector<std::pair<std::string, std::type_index>>
,因为如果它是一个映射,整个函数可以简化为
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
没有成员 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
编译器喜欢的任何地方。它仅在评估 return 语句时存在。
how can you call ->second
on its own
你不是。您正在 std::find_if
编辑的临时 return 上调用它
and why is there a != args_.end()
after the closing brace of std::find_if
?
没有。作者 假设 他们会找到匹配的元素。如果他们不这样做,则该程序具有未定义的行为。这可能是故意的,也可能是一个错误。
据我了解,std::find_if() below
returns 指向 arg
范围内第一个元素的迭代器,其中第三个参数(lamda 函数) returns 为真.那是对的吗?
有人可以解释为什么没有这样定义的迭代器吗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
是的,但是该迭代器随后在同一表达式中被取消引用。函数 return 是来自 args_
的某个元素的 std::type_index
的 copy,这大概是一些带有 [=15= 的类似 std 的容器] 的 std::pair<std::string, std::type_index>
(或类似)。
猜测是 std::vector<std::pair<std::string, std::type_index>>
,因为如果它是一个映射,整个函数可以简化为
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
没有成员 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
编译器喜欢的任何地方。它仅在评估 return 语句时存在。
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
?
没有。作者 假设 他们会找到匹配的元素。如果他们不这样做,则该程序具有未定义的行为。这可能是故意的,也可能是一个错误。