C++ 如何在容器类中添加对象的引用
我们都熟悉 C++ 中的别名(alias)。别名意味着为某个实体取另一个名称。因此,引用变量是一个别名,即现有变量/对象等的另一个名称。
以下是向变量添加引用的程序:
// C++ program to illustrate
// aliasing in variable
#include <bits/stdc++.h>
using namespace std;
void aliasing(int N)
{
// 使用 & 添加变量 N 的引用变量
int& a = N;
// 打印引用变量指向的值
cout << "a 的值: " << a << endl;
// 使用引用变量更新变量 N 的值
a = 100;
cout << "更新后的值:" << endl;
// 打印变量 a 和 N 的值
cout << "a 的值:" << a << endl;
cout << "N 的值:" << N << endl;
}
// 主函数
int main()
{
// 给定数字
int N = 9;
// 函数调用
aliasing(N);
return 0;
}
a 的值: 9
更新后的值:
a 的值:100
N 的值:100
解释: 在上面的程序中,变量 a 是变量 N 的别名,这意味着我们给变量 N 另一个名称。因此,无论我们使用 a 做什么都会影响 N,反之亦然。
因此,当我们将 a 的值更改为 100 时,N 的值也将更改为 100。
容器类中对象的引用: 以上方法正确地为任何变量提供别名,但在容器的情况下,以上方法会抛出编译错误,因为容器不能直接存储引用,但是有一种替代方法可以做到这一点。在 C++ STL 中,使用模板 std::reference_wrapper来给 C++ 中的任何容器提供引用。std::reference_wrapper 是一个类模板,它将引用包装在可复制、可分配的对象中。它经常用作存储标准容器内部的引用的机制(如在 vector,list 等中)。
以下是向容器类添加对象的引用的程序:
// C++ program to illustrate aliasing
// in list containers in C++
#include <bits/stdc++.h>
using namespace std;
class gfg {
private:
int a;
public:
gfg(int a)
{
this->a = a;
}
void setValue(int a)
{
this->a = a;
}
int getValue()
{
return this->a;
}
};
// 主函数
int main()
{
// 用 reference_wrapper 声明列表
list<reference_wrapper<gfg> > l;
// gfg类的对象
gfg obj(5);
l.push_back(obj);
// 打印变量 a 的值
cout << "obj 的 a 值为 "
<< obj.getValue() << endl;
cout << "更新后的值为" <<
```cpp
obj 的 a 值为 5
更新后的值为
obj 的 a 值为 700
列表中存储的值为 700
说明:
在上面的程序中,当创建一个类gfg的对象时,构造函数被调用,并且变量a的值被初始化为5。我们将对象的引用存储在列表中,然后通过调用成员函数 setValue() 来改变变量a的值为700。现在,当我们查看引用存储在列表中的对象的属性a的值时,存储的值为700。