std::vector composition with self populating super-powers
I think it is overkill to write an own class. This gives you many issues because you have to reimplement vector's interface.

In the current state I don't see any advantage over having just a function that returns a vector that is filled randomly:

#include &lt;vector&gt;
#include &lt;random&gt;
#include &lt;chrono&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

std::vector&lt;uint32_t&gt; generateRandomVector(std::size_t size) {
    static std::mt19937 gen(
            std::chrono::system_clock::now().time_since_epoch()
                    / std::chrono::milliseconds(1));
    static std::uniform_int_distribution&lt;uint32_t&gt; uint_dist99(0, 99);
    std::vector&lt;uint32_t&gt; result;
    result.reserve(size);
    std::generate_n(std::back_inserter(result), size,
            [&amp;] {return uint_dist99(gen);});
    return result;
}


Use it like this:

#include &lt;iostream&gt;

int main() {
    for (auto a : generateRandomVector(20)) {
        std::cout &lt;&lt; a &lt;&lt; std::endl;
    }
}


This approach has the advantage of cleanly separating the functionality of the vector (which is to store data) from the functionality of the random generation (which just manipulates a vector). 

Of course this interface looses some flexibility but if you need it then you should write a class that allows to create random vectors and not a vector class that happens to fill itself with random numbers.

Your Approaches


Using iota and shuffle does not really shorten the code of populate and somewhat "obfuscates" the thing that is going on there (so you would have to add additional comments to state what you want to achieve and why you restrict yourself to permutations).
The seeding of the random number generator can be done during construction which means during static initialization in the implementation file:


&nbsp;

std::size_t getSeedFromCurrentTime() {
    return std::chrono::system_clock::now().time_since_epoch() /
           std::chrono::milliseconds(1);
}

std::mt19937 algorithmicVec::gen(getSeedFromCurrentTime);


About obtaining the seeding from the time I have no experience and cannot help you there.