Я написал функцию для генерации одного случайного массива из исходного массива.
Нет, вы написали функцию, чтобы перетасовать начальный массив на место и затем скопировать его.Откровенно говоря, это немного странно, потому что я не понимаю, почему вы хотите изменить глобальное место (после первого вызова вашей функции глобальный массив все еще называется «начальным», но больше не находится в своем исходном состоянии).).
Поскольку мои знания C ++ на данный момент ограничены, я не знаю, как использовать векторы для динамического выделения.
Суть в том, что std::vector
обрабатываетвсе выделение для вас, избегая утечек памяти и ручного копирования в вашем текущем коде.
Если вы потратите время на правильное использование C ++, вместо того, чтобы пытаться писать C на C ++, код будет довольно тривиальным:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
// let's avoid mutating our global state
const std::vector<int> Seeds =
{10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200};
// this shuffles a copy of the argument passed
std::vector<int> shuffle(std::vector<int> v) {
std::random_shuffle(begin(v), end(v));
return v;
}
// return n independently-shuffled copies of "initial"
std::vector<std::vector<int>> shuffle_n(size_t n,
std::vector<int> const& initial) {
std::vector<std::vector<int>> result(n);
std::generate_n(begin(result), n,
[&initial]() {
return shuffle(initial);
});
return result;
}
int main() {
// one line to create 10 shuffled vectors
auto allparents = shuffle_n(10, Seeds);
// and one loop to print them all
for (auto &v : allparents) {
std::cout << '{';
std::copy(begin(v), end(v),
std::ostream_iterator<int>(std::cout, " "));
std::cout << "}\n";
}
}