用随机元素填充矢量

fill vector with random elements

本文关键字:填充 元素 随机      更新时间:2023-10-16

为什么我的lambda不把元素放在向量中?

void generate_N_numbers_in_the_vector(std::vector<int> &vec, int &M,
const int &N) {
std::random_device rand;
static std::mt19937 gen(rand());
static std::uniform_int_distribution<int> distribution(0, M);
vec.reserve(N);
std::generate(vec.begin(), vec.end(), []() { return distribution(gen); });
for (auto elem : vec) std::cout << elem << std::endl;
}

使用reserve时,向量中的元素数不会增加。这意味着begin(vec)end(vec)之间的差异为 0(或任何开始时向量的大小(。有两种可能性:

vec.resize(N);
std::generate(vec.begin(), vec.end(), [](){return distribution(gen);});
// or
vec.reserve(N); // Not necessary but sensible.
std::generate_n(std::back_inserter(vec), N, [](){return distribution(gen);});

std::vector::reserve保留空间,这意味着增加容量,而不是大小。请改用std::vector::resize来更改矢量的大小。