How to add reference of an object in Container Classes

We all are familiar with an alias in C++. An alias means another name for some entity. So, a reference variable is an alias that is another name for an existing variable/object etc.

Below is the program for adding reference to a variable:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to illustrate
// aliasing in variable
  
#include <bits/stdc++.h>
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;
}
chevron_right

Output:
Value of a: 9
After Update:
Value of a :100
Value of N :100

Explanation: In the above program, a variable a is an alias of variable N that means we have given another name to variable N. So what ever we are doing with a it will effect N also and vice-versa.
Therefore, when we change the value of a to 100, then, value of N also changed to be 100.

Reference of an object in Container Classes:
The above method is correct to give an alias to any variable but in the case of containers the above method will throw a Compilation Error because containers directly can’t store the references, But there is an alternative way of doing the same. The template std::reference_wrapper in C++ STL is used to give reference to any containers in C++. The std::reference_wrapper is a class template that wraps a reference in a copyable, assignable object. It is frequently used as a mechanism to store references inside standard containers(like in vector, list, etc) which cannot normally hold references.



Below is the program for adding a reference of an object in container class:

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
    }
};
  
// Driver Code
int main()
{
    // Declare list with reference_wrapper
    list<reference_wrapper<gfg> > 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;
}
chevron_right

Output:
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

Explanation:
In the above program, when an object is created of class gfg, the constructor is called and the value of variable a is initialized to 5. We have stored the reference of the object in the list and then we have changed the value of the variable a to 700 by calling the member function setValue(). Now, when we see the value of the property a of the object whose reference we had stored in the list. The value stored is 700.

Rated as one of the most sought after skills in the industry, own the basics of coding with our C++ STL Course and master the very concepts by intense problem-solving.





I love to express myself as well as my skills I always gear up to contribute to the organization i work or the society

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :