int rno; string name; int marks;
tuple <int, string, int> x=make_tuple(1, "anukul", 100);
tie(rno, name, marks)=x;
Run Code Online (Sandbox Code Playgroud)
这段代码将元组x中的值分配给变量.在某种程度上,它解包了元组x.
那么为什么这个函数被称为'tie'?它有什么关系?
cplusplus声称它"与元组元素的争论".但元组元素的变化并不反映在变量中.
Mar*_* A. 10
您应该阅读std :: tie的文档
创建一个对其参数的左值引用元组[...]
因此,除了使用它将元组"解压缩"为变量之外,您还可以按如下方式使用它
int rno = 10; string name; int marks;
tuple <int&, string&, int&> x = tie(rno, name, marks);
get<0>(x) = 42;
cout << rno; // 42
Run Code Online (Sandbox Code Playgroud)
我不认为上面的代码是'解包'任何东西,而是将变量与左值引用元组绑在一起.
正如utnapistim建议的那样(以及 示例代码中的文档显示)另一种与"解包"无关的可能用途是成员比较
struct comparable {
int a, b;
bool operator==(const comparable& x) {
return std::tie(a, b) == std::tie(x.a, x,b);
}
};
Run Code Online (Sandbox Code Playgroud)
它联系在一起的名字rho,name以及marks 在赋值语句,使它们像一个元组(可以被分配到一个单一的实体).它指的是它做什么(将几个实体绑定到一个元组),而不是你对结果做什么(通常解包另一个元组).
不要忘记std::tie实际返回的内容 - 一个元组.因此,您将变量绑定到一个临时元组,然后分配x到该临时元组.由于临时元组是引用元组,因此赋值将写入与该临时元组绑定的变量.
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |