The simplest way to generate your sequence would be to use std::shuffle to re-order a vector containing your desired values:
#include <vector>
#include <algorithm>
#include <random>
#include <iostream>
int main()
{
    std::random_device rd;
    std::mt19937 g(rd());
    std::vector<int> elements = { 1, 2, 3 };
    std::shuffle(elements.begin(), elements.end(), g);
    for (int i : elements)
    {
        std::cout << i << "\n";
    }
}
If you really must use rand() (its not generally a very good random number generator) you can just about squeeze it into shuffle too:
#include <vector>
#include <algorithm>
#include <ctime>
#include <iostream>
struct RandDevice
{
    using result_type = uint32_t;
    static result_type max() { return static_cast<result_type>(RAND_MAX); };
    static result_type min() { return 0; };
    result_type operator()() {
        return static_cast<result_type>(rand());
    }
};
int main()
{
    std::vector<int> elements = { 1, 2, 3 };
    srand(time(0));
    std::shuffle(elements.begin(), elements.end(), RandDevice());
    for (int i : elements)
    {
        std::cout << i << "\n";
    }
}