C++ 使用解构迭代对向量

Vas*_*Lup 5 c++

我遇到了以下代码:

vector<pair<int, int>> vec;
//...
for (auto &[f, s] : vec)
{
  //do something with f and s
}
Run Code Online (Sandbox Code Playgroud)

这个语法是如何工作的([f, s] : vec),以及它引入了什么标准?我可以用它从任何结构/类中获取字段值还是它特定于元组/对?

另外,这种方法的性能影响是什么?

在 C++11 中,我以下列方式使用 auto:

for (auto &it : vec)
{
  //do something with it.first and it.second
}
Run Code Online (Sandbox Code Playgroud)

flo*_*wit 6

您在此处看到的是结构化绑定。有关此功能的完整说明,请参阅https://en.cppreference.com/w/cpp/language/structured_binding。C++17 中引入了结构化绑定。它们提供了一种新语法来为类型的成员提供标识符。

通常,您也可以对自己的类型使用结构化绑定,但这需要更多的努力。默认情况下,支持数组、类似元组的对象和聚合。