Кратчайший способ инициализации вектора C ++ автоматически сгенерированными значениями - PullRequest
0 голосов
/ 18 ноября 2018

Мне интересно, есть ли в последних версиях стандарта C ++ что-нибудь, что позволило бы мне сконструировать вектор и заполнить его автоматически сгенерированными значениями (скажем, из ГСЧ) с наименьшим количеством нажатий клавиш, предпочтительно в одну строку .

Лучшее, что я могу придумать, это

int N=1000;
std::default_random_engine rng;
std::uniform_int_distribution<int> distr(0,99);

vector<int> v(N);
std::generate(v.begin(), v.end(), std::bind(distr,rng));

или

std::generate_n(v.begin(), N, std::bind(distr,rng));

но это так долго, что на самом деле требуется меньше нажатий клавиш для кодирования явного цикла инициализации:

    for(auto& x: v)
        x=distr(rng);

Мне особенно не нравится, что там .begin () и .end ().

Похоже, не существует подходящего конструктора для вектора, способного принимать инициализатор функтора, но, возможно, есть и другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...