C++ 如何在容器类中添加对象的引用

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。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程