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

📅  最后修改于: 2021-05-30 17:25:02             🧑  作者: Mango

我们都熟悉C++中的别名。别名表示某个实体的另一个名称。因此,引用变量是别名,是现有变量/对象等的别名。

以下是用于添加对变量的引用的程序:

// C++ program to illustrate
// aliasing in variable
  
#include 
using namespace std;
  
void aliasing(int N)
{
    // Adding reference variable to
    // N using &
    int& a = N;
  
    // Print the value pointed by
    // reference variable
    cout << "Value of a: " << a << endl;
  
    // Update the value of N using
    // reference variable
    a = 100;
  
    cout << "After Update:" << endl;
  
    // Print the value of a and N
    cout << "Value of a :" << a << endl;
    cout << "Value of N :" << N << endl;
}
  
// Driver Code
int main()
{
    // Given number
    int N = 9;
  
    // Function Call
    aliasing(N);
    return 0;
}
输出:
Value of a: 9
After Update:
Value of a :100
Value of N :100

说明:在上面的程序中,变量a是变量N的别名,这意味着我们为变量N赋予了另一个名称。所以什么都我们正在与一个做会影响n您可以,反之亦然。
因此,当我们将a的值更改为100时,N的值也更改为100。

容器类中对象的引用
上面的方法为任何变量提供别名是正确的,但是对于容器而言,由于容器无法直接存储引用,因此上述方法将引发编译错误,但是还有另一种方法可以做到这一点。 C++ STL中的模板std :: reference_wrapper用于引用C++中的任何容器。 std :: reference_wrapper是一个类模板,它将引用包装在可复制的,可分配的对象中。它通常用作一种将引用存储在通常无法保存引用的标准容器(如矢量,列表等)中的机制。

下面是在容器类中添加对象引用的程序:

// C++ program to illustrate aliasing
// in list containers in C++
#include 
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;
    }
};
  
// Driver Code
int main()
{
    // Declare list with reference_wrapper
    list > l;
  
    // Object of class gfg
    gfg obj(5);
  
    l.push_back(obj);
  
    // Print the value of a
    cout << "Value of a for object obj is "
         << obj.getValue() << endl;
  
    cout << "After Update" << endl;
  
    // Change the value of a for Object obj
    // using member function
    obj.setValue(700);
  
    // Print the value of a after Update
    cout << "Value of a for object obj is "
         << obj.getValue() << endl;
  
    cout << "\nValue stored in the list is ";
    for (gfg i : l)
        cout << i.getValue() << endl;
    return 0;
}
输出:
Value of a for object obj is 5
After Update
Value of a for object obj is 700

Value stored in the list is 700

解释:
在上面的程序中,当创建类gfg的对象时,将调用构造函数并将变量a的值初始化为5。我们将对象的引用存储在列表中,然后更改了变量的值通过调用成员函数setValue()将a更改为700。现在,当我们看到存储在列表中的对象的属性a的值时。存储的值为700。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”